我如何编写可以从命令行或通过ES6 import语句运行的Node脚本?
我正在使用--experimental-modules
标志和.mjs
扩展名将脚本作为ES6模块运行。
说我在sayHello.mjs
中有以下脚本:
export default function sayHello() {
console.log(`Hello!`);
}
我希望能够通过以下两种方式使用此脚本:
通过命令行:
node --experimental-modules sayHello.mjs
通过另一个脚本中的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');
}
答案 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;
}