Ala*_*air 35 node.js node-modules
我在查看node.js模块文档,并注意到每个模块都有一个属性 - module.parent.我试图使用它,但是被模块缓存烧毁了 - module.parent只有在首先需要()它的模块看来,无论当前的上下文如何.
那么它的用途是什么?有没有其他方法可以获得对当前 require()模块的引用?现在我将模块包装在一个函数中,因此它被调用为:
require("mylibrary")(module)
但这似乎不是最佳的.
Jon*_*ski 42
"父"是导致脚本被解释(和缓存)的模块,如果有的话:
// $ node foo.js
console.log(module.parent); // `null`
// require('./foo')
console.log(module.parent); // `{ ... }`
您期望的是"调用者",Node不会为您保留.为此,您需要将当前使用的导出函数作为值的闭包.
Roy*_*son 22
有一个解决方法.Node在完成加载之前将模块添加到模块缓存中.这意味着模块可以在加载时从模块缓存中删除自己!然后每次模块都是require'da'加载模块的新实例.
Magic.js
console.log('Required by ' + module.parent.filename);
delete require.cache[__filename];
Module1.js
//prints "Required by Module1.js"
require('./Magic');
Module2.js
//prints "Required by Module2.js"
require('./Magic');
当然,这样做的副作用是你的模块不再是单件,所以你必须考虑到Magic.js这一点.如果需要存储全局数据,可以始终将其保存在require()'ed模块中,该模块不会从缓存中删除自身.
| 归档时间: | 
 | 
| 查看次数: | 18934 次 | 
| 最近记录: |