导入Node.js模块函数,而不调用它

问题描述 投票:1回答:3

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

function init() {
  console.log('initializing');
}
init();

module.exports = { init };

我想在不评估init的情况下在另一个模块中要求/导入底层方法。不幸的是,似乎要求评估它:

> require('./test.js').init;
initializing
{ init: [Function: init] }

是否有可能需要此方法,而不在此方案中进行评估?

node.js
3个回答
2
投票

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


2
投票

您的问题与您自己调用init函数有关。只是不要在包含实现的模块中调用它,而是在任何其他模块中需要它之后调用该函数。

function init() {
  console.log('initializing');
}
// warning! do not call invoke init function here
// init()

module.exports = { init };

1
投票

这意味着init()不应该自动执行,并且应该有不同的入口点。

程序化使用的一个切入点(test.js)。另一个用作命令行可执行文件(test-cli.js):

require('./test.js').init()

这是NPM包的常见方案。 CLI入口点可以在包bin中指定。

© www.soinside.com 2019 - 2024. All rights reserved.