为了账号安全,请及时绑定邮箱和手机立即绑定

向NPM脚本发送命令行参数

向NPM脚本发送命令行参数

MYYA 2019-07-22 10:36:23
向NPM脚本发送命令行参数这个scripts我的部分package.json目前的情况如下:"scripts": {     "start": "node ./script.js server"}.这意味着我可以跑npm start启动服务器。到目前一切尚好。但是,我希望能够运行这样的npm start 8080并将论点传递给script.js(如:npm start 8080=> node ./script.js server 8080)。这个是可能的吗?
查看完整描述

3 回答

?
浮云间

TA贡献1829条经验 获得超4个赞

 可以把args传递给npm run截至国家预防机制2.0.0

语法如下:

npm run <command> [-- <args>]

注意必要的--..需要将传递给npm命令本身和传递给脚本的参数。

所以如果你有package.json

"scripts": {
    "grunt": "grunt",
    "server": "node server.js"}

那么,以下命令将是等效的:

grunt task:target => npm run grunt -- task:target

node server.js --port=1337 => npm run server -- --port=1337

要获得参数值,见这个问题..对于读取命名参数,最好使用如下解析库纱线极简主义;NodeJS公开process.argv全局地,包含命令行参数值,但这是一个低级api(由操作系统提供给节点可执行文件的空格分隔字符串数组)。


原文:作为一种解决方法(虽然不是很方便),您可以这样做:

说出你的包裹名称package.jsonmyPackage你也有

"scripts": {
    "start": "node ./script.js server"}

然后加上package.json:

"config": {
    "myPort": "8080"}

在你的script.js:

// defaulting to 8080 in case if script invoked not via "npm run-script" but directlyvar port = process.env.npm_package_config_myPort || 8080

那样,默认情况下npm start将使用8080。不过,您可以配置它(该值将由npm在其内部储存):

npm config set myPackage:myPort 9090

然后,当调用npm start,将使用9090(默认值为package.json将被重写)。


查看完整回答
反对 回复 2019-07-22
?
杨魅力

TA贡献1811条经验 获得超6个赞

你也可以这样做:

在……里面package.json:

"scripts": {
    "cool": "./cool.js"}

在……里面cool.js:

 console.log({ myVar: process.env.npm_config_myVar });

在CLI中:

npm --myVar=something run-script cool

应产出:

{ myVar: 'something' }

更新:使用NPM 3.10.3,它似乎降低了process.env.npm_config_变量?我也在用better-npm-run,所以我不确定这是否是普通的默认行为,但是这个答案工作。而不是process.env.npm_config_myVar,试试看process.env.npm_config_myvar


查看完整回答
反对 回复 2019-07-22
  • 3 回答
  • 0 关注
  • 1895 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信