with parameter node modules meme example custom javascript node.js node-modules

javascript - parameter - npm



¿Cómo cambiar la envoltura del módulo Node.js? (3)

Has hecho un gran trabajo al encontrar la función Module.wrap . ¿Qué tal simplemente sobrescribirlo?

Imagina que tienes dos archivos, main.js y module.js . En main.js sobrescribes la función Module.wrap para console.log(''debug''); Cada vez que se requiere un módulo. Entonces necesitas module.js , que contiene un mensaje de hello world.

main.js :

var Module = require("module"); (function(moduleWrapCopy) { Module.wrap = function(script) { script = "console.log(''debug'');" + script return moduleWrapCopy(script); // Call original wrapper function }; }(Module.wrap)); // Pass original function to IIFE require("./module.js");

module.js :

console.log("Hello world from module.js!");

La ejecución del node main.js da node main.js resultado:

debug Hello world from module.js!

Esto también funciona con llamadas de require() anidadas, por ejemplo, si require("./module2.js") en module.js :

module.js :

console.log("Hello world from module.js!"); require("./module2.js");

module2.js :

console.log("Hello world from module2.js!");

En este caso el node main.js produce:

debug Hello world from module.js! debug Hello world from module2.js!

Probado en Node.js 4.3.0 y 6.1.0.

Para propósitos de prueba, necesito cambiar la envoltura del Module Node.js.

(function (exports, require, module, __filename, __dirname, process, global) { debugger; });

Jugado con el Module que encontré

var Module = require("module") Module.wrapper -> ["(function (exports, require, module, __filename, __dirname, process, global) { ", " });"] Module.wrap -> function(script) { return NativeModule.wrapper[0] + script + NativeModule.wrapper[1]; }

¿Es posible enganchar en Module.wraper o propiedad para cambiar el Module.wraper script?


No puede cambiar el envoltorio dentro de la aplicación de nodo, sin anular la función requerida. pero puede bifurcar (copiar) la fuente del nodo a su computadora, cambiar una línea y compilarla (construirla).

Por eso le encanta el código abierto :)

Todo lo que tiene que hacer es cambiar una línea de código si el archivo src / node.js

Aquí: https://github.com/nodejs/node/blob/master/src/node.js#L990

NativeModule.wrapper = [ ''(function (exports, require, module, __filename, __dirname) { '', ''/n});'' ];


Puede anular, el require por su propio método. Por ejemplo

require = function(module_name) { var js = openTheModuleIndexFile(module_name) var wrapped = wrapTheModule(js) eval(wrapped) }

Todo lo que tiene que hacer es implementar la función openTheModuleIndexFile , y wrapTheModule que es su función de wrapTheModule .

(No olvide que el nombre de module_name puede existir en los module_name de este directorio, directorio principal o directivo secundario, incluso puede ser solo un nombre de archivo JS)

Estoy seguro, necesitas hacer los mismos hacks, pero al final, debería funcionar.