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

dwh*_*ieb 5 javascript node.js node-modules es6-modules

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

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

例子

假设我有以下脚本sayHello.mjs

export default function sayHello() {
  console.log(`Hello!`);
}
Run Code Online (Sandbox Code Playgroud)

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

  1. 通过命令行:

    node --experimental-modules sayHello.mjs
    
    Run Code Online (Sandbox Code Playgroud)
  2. 通过另一个脚本中的 ES6 导入语句:

    node --experimental-modules sayHello.mjs
    
    Run Code Online (Sandbox Code Playgroud)

细节

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

import sayHello from './sayHello.mjs';

sayHello();
Run Code Online (Sandbox Code Playgroud)

Ste*_*eve 4

你可以尝试:

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

从命令行,使用:

CL=1 node --experimental-modules sayHello.mjs
Run Code Online (Sandbox Code Playgroud)

很简单,但应该可以工作

另一个选项是检查,process.argv[1]因为它应该始终是从命令行指定的文件名

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