NodeJS – 我可以检测何时从命令行(ES6 +巴别)调用..?

在我的模块中,我需要检测它是从命令行还是从另一个模块调用。

const isFromCLI = '????' 

我使用的是Babel / ES6,所以当从命令行调用时, index.js被调用(使用babel代码),它将交给script.js (使用ES6代码)。 所以从脚本文件中, module.parent返回moduleindex.js文件)。 所以我不能使用 module.parent

此外,当从命令行或从另一个模块调用module.mainmodule.mainundefined (在script.js )。 所以我不能使用 module.main

这是其他人提出的两种解决scheme,但是他们不适合我。

使用Babel / ES6时有没有简单的检测?

更新

require.main在从命令行或从另一个模块调用时返回模块。

您可以使用节点中的Process

https://nodejs.org/api/process.html#process_process_argv

检查第二个参数的值(做一个包含types匹配)。 不知道这是否是唯一的方法,但它是一个简单的方法来实现你所需要的

代码片段可能是:

  const isFromCLI = (process.argv[1].indexOf('my-script.js') !== -1); 

您可以使用节点环境variables 。

你可以像这样设置一个环境variables:

CLI=true node app.js

然后获取像这样的环境variables:

const isFromCLI = process.env.CLI === 'true'

注意: process.env.CLI将是一个string。

更新:

如果你想做类似node app.js --cli东西,你可以这样做:

 let isFromCLI process.argv.forEach(function (val, index, array) { if (array[index] === '--cli') { isFromCLI = true } }) console.log(isFromCLI)