我的 scripts
的 package.json
部分目前如下所示:
"scripts": {
"start": "node ./script.js server"
}
…这意味着我可以运行 npm start
来启动服务器。到目前为止,一切都很好。
但是,我希望能够运行类似 npm start 8080
的东西并将参数传递给 script.js
(例如 npm start 8080
=> node ./script.js server 8080
)。这可能吗?
原文由 arnemart 发布,翻译遵循 CC BY-SA 4.0 许可协议
npm 2 及更新版本
自 npm 2 (2014) 以来,可以 将 args 传递给
npm run
。语法如下:npm run <command> [-- <args>]
注意
--
分隔符,用于分隔传递给npm
命令本身的参数和传递给脚本的参数。使用示例
package.json
:以下是将参数传递给这些脚本的方法:
_注意_: 如果您的参数不以
-
或--
开头,则不需要明确的--
分隔符;但为了清楚起见,最好还是这样做。请注意下面的行为差异(
test.js
有console.log(process.argv)
):以-
或--
开头的参数 传递给npm
而不是 script ,并在那里默默地吞下。当您使用 npm 实际 使用的参数时,差异会更加明显:
要获取参数值, 请参阅此问题。要读取命名参数,最好使用 yargs 或 minimist 之 类的解析库; nodejs 全局公开
process.argv
,包含命令行参数值,但这是一个低级 API(空格分隔的字符串数组,由操作系统提供给节点可执行文件)。编辑 2013.10.03: 目前无法直接使用。但是 在
npm
上打开了一个相关的 GitHub 问题, 以实现您要求的行为。似乎共识是实现这一点,但这取决于之前解决的另一个问题。原始答案(2013.01): 作为某种解决方法(虽然不是很方便),您可以执行以下操作:
从
package.json
说你的包名是myPackage
并且你也有然后添加
package.json
:在你的
script.js
中:这样,默认情况下
npm start
将使用 8080。但是您可以对其进行配置(该值将由npm
存储在其内部存储中):然后,在调用
npm start
,将使用 9090(package.json
中的默认值被覆盖)。