猿问

向NPM脚本发送命令行参数

向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)。这个是可能的吗?


MYYA
浏览 1896回答 3
3回答

浮云间

&nbsp;可以把args传递给npm run截至国家预防机制2.0.0语法如下:npm run <command> [-- <args>]注意必要的--..需要将传递给npm命令本身和传递给脚本的参数。所以如果你有package.json"scripts":&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;"grunt":&nbsp;"grunt", &nbsp;&nbsp;&nbsp;&nbsp;"server":&nbsp;"node&nbsp;server.js"}那么,以下命令将是等效的:grunt task:target&nbsp;=>&nbsp;npm run grunt -- task:targetnode server.js --port=1337&nbsp;=>&nbsp;npm run server -- --port=1337要获得参数值,见这个问题..对于读取命名参数,最好使用如下解析库纱线或极简主义;NodeJS公开process.argv全局地,包含命令行参数值,但这是一个低级api(由操作系统提供给节点可执行文件的空格分隔字符串数组)。原文:作为一种解决方法(虽然不是很方便),您可以这样做:说出你的包裹名称package.json是myPackage你也有"scripts":&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;"start":&nbsp;"node&nbsp;./script.js&nbsp;server"}然后加上package.json:"config":&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;"myPort":&nbsp;"8080"}在你的script.js://&nbsp;defaulting&nbsp;to&nbsp;8080&nbsp;in&nbsp;case&nbsp;if&nbsp;script&nbsp;invoked&nbsp;not&nbsp;via&nbsp;"npm&nbsp;run-script"&nbsp;but&nbsp;directlyvar&nbsp;port&nbsp;=&nbsp;process.env.npm_package_config_myPort&nbsp;||&nbsp;8080那样,默认情况下npm start将使用8080。不过,您可以配置它(该值将由npm在其内部储存):npm&nbsp;config&nbsp;set&nbsp;myPackage:myPort&nbsp;9090然后,当调用npm start,将使用9090(默认值为package.json将被重写)。

杨魅力

你也可以这样做:在……里面package.json:"scripts":&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;"cool":&nbsp;"./cool.js"}在……里面cool.js:&nbsp;console.log({&nbsp;myVar:&nbsp;process.env.npm_config_myVar&nbsp;});在CLI中:npm&nbsp;--myVar=something&nbsp;run-script&nbsp;cool应产出:{&nbsp;myVar:&nbsp;'something'&nbsp;}更新:使用NPM 3.10.3,它似乎降低了process.env.npm_config_变量?我也在用better-npm-run,所以我不确定这是否是普通的默认行为,但是这个答案是工作。而不是process.env.npm_config_myVar,试试看process.env.npm_config_myvar
随时随地看视频慕课网APP
我要回答