如何让npm包bin运行实验模块选项?

duX*_*ing 11 javascript node.js npm package.json es6-modules

从Node v8.5.0开始,支持ES6样式模块

import x from 'x'
Run Code Online (Sandbox Code Playgroud)

已使用该选项运行节点--experimental-modules,如下所示:

node --experimental-modules test.mjs

使用bin密钥package.json可以通过运行轻松创建cli工具npm clinpm link.

不幸的是,当以这种方式运行时,调用节点而没有可选--experimental-modules标志.

你怎么用bin模块--experimental-modules

这是一个例子

斌/ healthcheck.mjs

import { connect } from 'amqplib'

let open = connect(process.env.RABBITMQ_URL);

const exit = ({healthy = true}) => {
  return healthy ? process.exit(0) : process.exit(1)
}

open.then(() => {
  exit({healthy: true})
}).catch((e) => {
  exit({healthy: false})
})
Run Code Online (Sandbox Code Playgroud)

的package.json

{
  "name": "my-cli",
  "bin": {
    "healthcheck": "./bin/healthcheck.mjs"
  }
}
Run Code Online (Sandbox Code Playgroud)

运行...

> npm link
> healthcheck
/usr/local/bin/healthcheck: line 1: import: command not found
/usr/local/bin/healthcheck: line 3: syntax error near unexpected token `('
/usr/local/bin/healthcheck: line 3: `let open = connect(process.env.RABBITMQ_URL);'
Run Code Online (Sandbox Code Playgroud)

Pat*_*ott 9

您可以在脚本顶部使用shebang

#!/bin/sh 
":" //# comment; exec /usr/bin/env node --experimental-modules "$0" "$@"
Run Code Online (Sandbox Code Playgroud)

此处有更多详细信息:http : //sambal.org/2014/02/passing-options-node-shebang-line/

  • 尼斯帕特里克!在我的简单用例中,我只是在入口点文件的顶部添加了以下代码:`#!/ usr / bin / env node --experimental-modules --no-warnings`。谢谢! (4认同)