2016-02-04 22 views
14

Test amaçları için Node.js Module sarıcısını değiştirmem gerekiyor. Node.js modül sarıcı nasıl değiştirilir?

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

Senaryonun sarma değiştirmek için Module.wraper veya mülk içine kanca mümkün mü
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]; 
} 

bulundu Module etrafında oynanan?

cevap

12

Module.wrap işlevini kullanarak harika bir iş çıkardınız. Sadece üzerine yazmaya ne dersin?

Eğer iki dosya, main.js ve module.js olduğunu düşünün. main.js size console.log('debug'); için bir modül gerekli olan her Module.wrap fonksiyonunu üzerine. Daha sonra merhaba dünya mesajı içeren module.js'a ihtiyacınız var.

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:

debug 
Hello world from module.js! 

:

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

içinde node main.js sonuçlar yürütme

Eğer require("./module2.js")module.js yılında bu da örneğin, iç içe require() çağrıları ile çalışır:

module.js:

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

require("./module2.js"); 

module2.js: Bu durumda node main.js yılında

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

üretir:

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

Node.js 4.3.0 ve 6.1.0 üzerinde test edilmiştir.

3

Sen geçersiz kılabilirsiniz, kendi yöntemiyle require. Örneğin

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

için yapmanız gereken tek şey openTheModuleIndexFile işlevi uygulamak için, ve wrapTheModule senin sarma işlevi.

eminim (bu sadece bir JS dosya adı olabilir hatta var olabilir module_name bu dizinde, ebeveyn dizin veya çocuk directery ait node_modules olduğunu var unutmayın), yapmanız gereken aynı hack, ama sonunda, çalışması gerekir.

+0

Teşekkürler ama maalesef değerlendirme bir seçenek değil. –

0

Sen geçersiz kılma olmadan fonksiyonunu gerektiren, düğüm uygulamanın içinden sarmalayıcı değiştiremez. ancak bilgisayarınıza (kopyalama) düğüm kaynağını çatal, bir satır & derleme (build) değiştirin.

o açık kaynak :)

yapmanız gereken tek şey bir satır kodun değiştirmektir bu yüzden seviyorum eğer src burada/node.js dosya

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

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