gpt4 book ai didi

node.js - 如何使用experimental-specifier-resolution=node 运行node.js cli?

转载 作者:行者123 更新时间:2023-12-04 07:28:08 25 4
gpt4 key购买 nike

我们的团队构建了一个用于维护的小型 CLI。 package.json 使用 bin 指定路径属性(property),一切都很好; "bin": { "eddy": "./dist/src/cli/entry.js"}使用 yargs@17.0.1 实现自动补全. 然而我们最近将项目转换为使用 es6 模块,因为迁移到 Sveltekit,即 package.json 现在包含 type: module .正因为如此,CLI 现在只有在我们运行时才有效:
什么有效

node --experimental-specifier-resolution=node ./dist/src/cli/entry.js help
但是,如果我们在没有标志的情况下运行它,我们会得到一个错误“找不到模块”:
Error [ERR_MODULE_NOT_FOUND]: Cannot find module...
所以问题是
我们能否以某种方式“总是”添加 experimental-specifier-resolution=node到 CLI - 所以我们可以继续使用简写 eddy ,并利用自动完成?

最佳答案

这里有两种可能的解决方案。
解决方案 1
您的 entry.js文件应该以 #!/usr/bin/env node 之类的 shebang 开头.您不能在此处直接指定标志,但是,如果您可以直接在 shebang 中提供 Node 的绝对路径,则可以指定标志。
假设您在 /usr/bin/node 中安装了 Node ,你可以在entry.js中写shebang像:

#!/usr/bin/node --experimental-specifier-resolution=node
(使用 which node 查找绝对路径)
但是,这不是一个非常便携的解决方案。您不能总是假设每个人都将 Node 安装在同一路径中。还有一些可能使用 nvm 来管理版本,并且可以在不同的路径中有多个版本。这就是我们使用 /usr/bin/env 的原因。首先找到所需的 Node 安装。这导致了第二种解决方案。
解决方案 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使用 node带有所需的标志。 "$@"命令中的 将被您传递给 eddy 的任何参数替换.
所以 eddy help将转换为 /usr/bin/env node --experimental-specifier-resolution=node ./entry.js help

关于node.js - 如何使用experimental-specifier-resolution=node 运行node.js cli?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68111434/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com