我的package.json
的scripts
部分当前如下所示:
"scripts": {
"start": "node ./script.js server"
}
...这意味着我可以运行npm start
来启动服务器。到目前为止还不错。
但是,我希望能够运行类似npm start 8080
的东西,并将参数传递给script.js
(例如,npm start 8080
=>node./script.js server 8080
)。这可能吗?
您也可以这样做:
在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
您要求能够运行类似npm start8080
的内容。这是可能的,不需要修改script.js
或配置文件,如下所示。
例如,在“scripts”
JSON值中,包括--
"start": "node ./script.js server $PORT"
然后从命令行:
$ PORT=8080 npm start
我已经确认使用bash和npm1.4.23可以工作。请注意,此解决方法不需要解决GitHub npm问题#3494。
自npm 2(2014年)以来,可以将参数传递给npm Run
。语法如下:
NPM运行
请注意--
分隔符,用于分隔传递给npm
命令本身的参数和传递给脚本的参数。
示例package.json
:
"scripts": {
"grunt": "grunt",
"server": "node server.js"
}
以下是如何将参数传递给这些脚本:
npm run grunt -- task:target // invokes `grunt task:target`
npm run server -- --port=1337 // invokes `node server.js --port=1337`
注意:如果您的参数不以-
或--
开头,则不需要显式的--
分隔符;但为了清晰起见,最好还是这样做。
npm run grunt task:target // invokes `grunt task:target`
注意下面的行为差异(test.js
有console.log(process.argv)
):以-
或--
开头的参数传递给npm
而不是脚本,并且在那里被静默吞噬。
$ npm run test foobar
['C:\\Program Files\\nodejs\\node.exe', 'C:\\git\\myrepo\\test.js', 'foobar']
$ npm run test -foobar
['C:\\Program Files\\nodejs\\node.exe', 'C:\\git\\myrepo\\test.js']
$ npm run test --foobar
['C:\\Program Files\\nodejs\\node.exe', 'C:\\git\\myrepo\\test.js']
$ npm run test -- foobar
['C:\\Program Files\\nodejs\\node.exe', 'C:\\git\\myrepo\\test.js', 'foobar']
$ npm run test -- -foobar
['C:\\Program Files\\nodejs\\node.exe', 'C:\\git\\myrepo\\test.js', '-foobar']
$ npm run test -- --foobar
['C:\\Program Files\\nodejs\\node.exe', 'C:\\git\\myrepo\\test.js', '--foobar']
当您使用NPM实际使用的参数时,差别就更清楚了:
$ npm test --help // this is disguised `npm --help test`
npm test [-- <args>]
aliases: tst, t
若要获得参数值,请参阅以下问题。对于读取命名参数,最好使用yargs或Minimist这样的解析库;nodejs全局公开process.argv
,包含命令行参数值,但这是一个低级API(由操作系统提供给节点可执行文件的以空格分隔的字符串数组)。
编辑2013.10.03:当前无法直接编辑。但是在
npm
上打开了一个相关的GitHub问题,以实现您所要求的行为。似乎大家一致认为应该实现这一目标,但这取决于之前解决的另一个问题。
原答案(2013.01):作为某种变通办法(虽然不是很得心应手),你可以做如下:
在package.json
中假设您的包名为mypackage
并且您还
"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 directly
var port = process.env.npm_package_config_myPort || 8080
这样,默认情况下npm start
将使用8080。但是,您可以对其进行配置(该值将由npm
存储在其内部存储器中):
npm config set myPackage:myPort 9090
然后,当调用npmstart
时,将使用9090(覆盖package.json
中的默认值)。
问题内容: 我当前的部分看起来像这样: …这意味着我可以运行来启动服务器。到现在为止还挺好。 但是,我希望能够运行类似的东西并将参数传递给(例如=> )。这可能吗? 问题答案: 编辑: 可以将args传递给npm2.0.0 语法如下: 注意必要的。需要将传递给命令本身的参数和传递给脚本的参数分开。 所以如果你有 那么以下命令将是等效的: => => 为了读取命名参数,最好使用yargs或[mini
我一直在试图找到一种方法,从我的PC(Windows 7)向Arduino Uno R3发送串行命令。我一直在做这个简单的程序,你应该通过USB电缆发送一个简单的“1”,以便打开车载LED。我的Arduino代码应该可以工作(我知道的,但我会确保上传它)。我一直在尝试使用Python和pySerial发送此命令,但我似乎无法让pySerial正常工作。我也尝试过使用CMD,但当我输入命令(ECHO
尝试使用Visual Studio Code上的npm start命令运行节点应用程序时收到此错误。非常感谢任何帮助! 这是我包裹里的东西。json文件: 这是我运行代码时终端上的消息:
问题内容: 是否可以通过命令行将参数传递给MySQL脚本? 在此示例中,类似于@start_date的内容: 问题答案: 发现在网络上的答案在这里。 基本上,假设我们要运行以下查询: 我们可以这样传递“ start_date”和“ end_date”:
我正在创建一个java应用程序,通过PC/SC非接触式阅读器和javax.smartcardioAPI与MifeDesFire卡通信。我设法发送常规的ISO 7816 APDU(CLA,INS,P1-P2,Lc,命令数据,Le)。 我在Ridrix的博客上读到,DESFire卡(至少我正在使用的EV1版本)支持APDU和本地命令,其中大多数命令只有1字节长。 例如,“获取版本”命令: 我用Spri
在Linux或Mac上运行带有命令行参数的Node.js脚本的正确语法是什么? 要在没有参数的情况下运行脚本,我只需使用命令node stuff。但是在这种情况下,我想运行一个名为stuff的脚本。js带有参数“blah”、“hee”、“woohoo!” 。