我有一个Node.js模块,其中包含一个导出的函数,并且设计为在从命令行运行脚本时调用:
function init() {
console.log('initializing');
}
init();
module.exports = { init };
我想在不评估init的情况下在另一个模块中要求/导入底层方法。不幸的是,似乎要求评估它:
> require('./test.js').init;
initializing
{ init: [Function: init] }
是否有可能需要此方法,而不在此方案中进行评估?
How about在检查require.main === module
时从命令行调用脚本时放置你需要运行的部分?这样,只有在使用init()
调用该脚本时才会调用node test.js
。所以:
function init() {
console.log('initializing');
}
if (require.main === module) {
init();
}
module.exports = { init };
这有点向后回答你的问题,但我认为这可能接近你正在寻找的东西。
关于changes to this feature旗帜,你可能想留意--experimental-modules
。
您的问题与您自己调用init
函数有关。只是不要在包含实现的模块中调用它,而是在任何其他模块中需要它之后调用该函数。
function init() {
console.log('initializing');
}
// warning! do not call invoke init function here
// init()
module.exports = { init };
这意味着init()
不应该自动执行,并且应该有不同的入口点。
程序化使用的一个切入点(test.js
)。另一个用作命令行可执行文件(test-cli.js
):
require('./test.js').init()
这是NPM包的常见方案。 CLI入口点可以在包bin
中指定。