导入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] } 是

我有一个Node.js模块,其中有一个导出的函数,设计为在从命令行运行脚本时调用:

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()