如果你想偷懒加载模块,它现在可以用ES6(节点V6)
编辑:如果你需要的要求(如 require.cache)访问的属性这将无法正常工作。
module.js
console.log('Module was loaded')
exports.d=3
main.js
var _require = require;
var require = function (moduleName) {
var module;
return new Proxy(function() {
if (!module) {
module = _require(moduleName)
}
return module.apply(this, arguments)
}, {
get: function (target, name) {
if (!module) {
module = _require(moduleName)
}
return module[name];
}
})
};
console.log('Before require');
var a = require('./module')
console.log('After require');
console.log(a.d)
console.log('After log module');
输出
Before require
After require
Module was loaded
3
After log module
感谢彼得,这使得这一切使很多更有意义。 – 2012-02-04 09:29:27
早期加载对于CLI工具没有意义(除了测试,您可以暂时禁用它)。 – sheerun 2014-04-12 15:23:41
@PeterLyons您可以向我解释“Node是单线程的,因此加载模块的内存占用不是每个连接,而是每个进程。加载一个模块是一次性的以便将其存入内存”。我明白单个线程是什么,你的意思是说,无论连接到服务器的数量是多少,一个特定的模块只会在整个应用程序中加载一次? – Deepak 2015-06-06 17:17:00