这里有两种可能的解决方案。
解决方案1
Your entry.js
文件应该以 shebang 开头#!/usr/bin/env node
。您不能直接在此处指定该标志,但是,如果您可以直接在 shebang 中提供节点的绝对路径,则可以指定该标志。
假设你已经安装了节点/usr/bin/node
,你可以将 shebang 写在entry.js
like:
#!/usr/bin/node --experimental-specifier-resolution=node
(Use which node
找到绝对路径)
然而,这不是一个非常便携的解决方案。您不能总是假设每个人都将节点安装在同一路径中。还有一些可能使用 nvm 来管理版本,并且可以在不同的路径中有多个版本。这就是我们使用的原因/usr/bin/env
首先找到所需的节点安装。这导致了第二种解决方案。
解决方案2
您可以创建一个 shell 脚本,该脚本将使用所需的标志调用 cli 入口点。该 shell 脚本可以在package.json
bin
部分。
shell 脚本(entry.sh
)应该看起来像:
#!/usr/bin/env bash
/usr/bin/env node --experimental-specifier-resolution=node ./entry.js "$@"
然后,在你的package.json
,将 bin 替换为:
"bin": { "eddy": "./dist/src/cli/entry.sh"}
所以当你跑步时eddy
,它将运行entry.js
using node
带有所需的标志。这"$@"
命令中的内容将被您传递给的任何参数替换eddy
.
So eddy help
将翻译为/usr/bin/env node --experimental-specifier-resolution=node ./entry.js help