通过命令行或ES6导入运行Node.js脚本

时间:2018-09-20 17:55:10

标签: javascript node.js node-modules es6-modules

我如何编写可以从命令行或通过ES6 import语句运行的Node脚本?

我正在使用--experimental-modules标志和.mjs扩展名将脚本作为ES6模块运行。

示例

说我在sayHello.mjs中有以下脚本:

export default function sayHello() {
  console.log(`Hello!`);
}

我希望能够通过以下两种方式使用此脚本:

  1. 通过命令行:

    node --experimental-modules sayHello.mjs

  2. 通过另一个脚本中的ES6导入语句:

import sayHello from './sayHello.mjs';

sayHello();

详细信息

我正在寻找类似于对CommonJS模块使用module.main的解决方案(不适用于ES6导入):

if (require.main === module) {
    console.log('run from command line');
} else {
    console.log('required as a module');
}

1 个答案:

答案 0 :(得分:0)

您可以尝试:

function sayHello() { console.log("Hello"); }
if (process.env.CL == 1){
    sayHello();
} else {
    export default sayHello;
}

从命令行使用:

CL=1 node --experimental-modules sayHello.mjs

非常简单,但是应该可以工作

另一种选择是检查process.argv[1],因为它应始终为the filename that was specified from the commandline

if (process.argv[1].indexOf("sayHello.mjs") > -1){
    sayHello();
} else {
    export default sayHello;
}