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

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

如何编写可从命令行或通过 ES6 导入语句运行的 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');
}

最佳答案

你可以试试:

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;
}

关于javascript - 通过命令行或 ES6 导入运行 Node.js 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52430702/

相关文章:

javascript - Chrome 推送通知(注册并等待通知)

javascript - 如何在定界字符串中查找数字字符串

javascript - 如何使用文本 <input> 框更改 window.location url

node.js - Node - 通过网络套接字发送大型 JSON

node.js - 如何测试 Connect/Express 中间件?

css - 使用 Parcel 从 node_modules 导入 CSS

javascript - 我怎样才能让这个函数返回使用 jQuery.ajax 检索到的值?

json - 如何使用 `request` 模块传递变量

javascript - 如何在 webpack 中使用别名来覆盖 node_modules 中已经存在的依赖项?

node.js - NodeJS 模块之间共享数据