2017-03-19 1 views
1

Monkeypatching la fonction require dans node.js peut s'avérer utile, en particulier pour certaines bibliothèques. Je suis en train de comprendre comment je pouvais le faire correctement, en toute sécurité, etc.Monkeypatching sûr et correctement la fonction require dans Node.js

Voici ce que j'ai:

const Mod = require('module'); 

const req = Mod.prototype.require; 

Mod.prototype.require = function() { 
    // do some side-effect of your own 
    req.apply(this, arguments); 
}; 

mais c'est pas tout à fait travailler et je ne sais pas pourquoi. Je reçois cette erreur avec le module de mise au point:

TypeError: Cannot set property 'init' of undefined 
    at Object.<anonymous> (/Users/alexamil/WebstormProjects/oresoftware/sumanjs/suman/node_modules/debug/src/node.js:15:14) 
    at Module._compile (module.js:571:32) 
    at Object.Module._extensions..js (module.js:580:10) 
    at Module.load (module.js:488:32) 
    at tryModuleLoad (module.js:447:12) 
    at Function.Module._load (module.js:439:3) 
    at Module.require (module.js:498:17) 
    at Module.Mod.require (/Users/alexamil/WebstormProjects/oresoftware/sumanjs/suman/lib/index.js:11:9) 
    at require (internal/module.js:20:19) 
    at Object.<anonymous> (/Users/alexamil/WebstormProjects/oresoftware/sumanjs/suman/node_modules/debug/src/index.js:9:20) 

si mon code est OK, alors peut-être que je devrais regarder de plus près ce que le module de débogage est en train de faire?

Répondre

2

Vous ne retournez pas le résultat:

Mod.prototype.require = function() { 
    // do some side-effect of your own 
    return req.apply(this, arguments); 
}; 

Sans cette return votre wrapper retourne toujours undefined.

+0

yup c'était tout, merci! –