导入Node.js模块函数,而不调用它
我有一个Node.js模块,其中有一个导出的函数,设计为在从命令行运行脚本时调用:导入Node.js模块函数,而不调用它,node.js,Node.js,我有一个Node.js模块,其中有一个导出的函数,设计为在从命令行运行脚本时调用: function init() { console.log('initializing'); } init(); module.exports = { init }; 我希望在另一个模块中要求/导入底层方法,而不计算init。不幸的是,似乎需要对其进行评估: > require('./test.js').init; initializing { init: [Function: init] } 是
function init() {
console.log('initializing');
}
init();
module.exports = { init };
我希望在另一个模块中要求/导入底层方法,而不计算init。不幸的是,似乎需要对其进行评估:
> require('./test.js').init;
initializing
{ init: [Function: init] }
是否可能需要此方法,而不在此场景中对其进行评估?您的问题与您自己调用
init
函数有关。
只是不要在包含实现的模块中调用它,而是在任何其他模块中需要函数后调用它
function init() {
console.log('initializing');
}
// warning! do not call invoke init function here
// init()
module.exports = { init };
将从命令行调用脚本时需要运行的部分放入检查require.main===module
?这样,只有在使用node test.js
调用该脚本时,才会调用init()。因此:
function init() {
console.log('initializing');
}
if (require.main === module) {
init();
}
module.exports = { init };
这倒过来回答了你的问题,但我认为这可能接近你想要的
您可能需要注意--实验模块
标志。这意味着init()
不应该自动执行,应该有不同的入口点
一个编程使用的入口点(test.js
)。另一个用作命令行可执行文件(test cli.js
):
这是NPM包的常见场景。CLI入口点可以在包中指定。我特别需要在这个用例中调用它。是否要扩展这个用例?目前,如果不解析每个语句(包括对init()
的调用),就无法解析模块。在本例中,它将始终被调用,因为它位于模块全局范围内。
require('./test.js').init()