npm script pass parameters/arguments to node script using yargs
当用作NPM脚本参数时,是否可以调用以从yargs中检索键?
OSX终端中的用户类型:
1 | npm run scaffold --name=blah |
在package.json中执行:
1 | "scaffold" :"node ./scaffold/index.js --" |
这导致
1 2 3 4 5 6 7 8 9 10 11 | const yargs = require('yargs').argv if (yargs) { console.log(yargs); console.log(yargs.name); process.exit(1) } ... result: { _: [], '$0': 'scaffold/index.js' } undefined |
只有当我在package.json
正如我所说,我使用的是args,因为它看起来可以很容易地按名称(而不是数组)检索键。乐于接受建议。
我错过了什么?
更新日期:2017年7月11日相关:向NPM脚本发送命令行参数
但是,通过命令行
1 2 | 1: { _: [], '$0': 'scaffold/index.js' } 2: { _: [ 'name=hello' ], '$0': 'scaffold/index.js' } |
仍然找不到检索
更新日期:2017年7月13日
目前,我已经放弃了。这似乎是不可能的。我在终端中手动运行脚本。例如。
1 | node ./scaffold/index.js --name=blah |
下图显示了直接执行节点脚本,而不是运行NPM脚本。我已经添加了https://www.npmjs.com/package/nopt节点模块,看看它是否有帮助(它没有)。在运行NPM脚本时,
更新日期:2017年7月18日
添加了github示例:https://github.com/sidouglas/stackoverflow-node-arguments
更新日期:2017年7月24日
在命令开始前添加变量与
从[email protected]开始,在执行脚本时可以使用自定义参数。getopt使用特殊选项--来分隔选项的结尾。NPM将把后面的所有参数直接传递给脚本:
https://docs.npmjs.com/cli/run-script(运行脚本)
我不确定在命令行中添加变量的位置是否重要,如果您不关心这一点,那么这是有效的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | //package.json { "name":"npm-test", "version":"1.0.0", "description":"", "main":"index.js", "dependencies": {}, "devDependencies": {}, "scripts": { "start":"node index.js" }, "author":"", "license":"ISC" } |
您的JS文件:
1 2 | //index.js console.log('myvar', process.env.myvar); |
命令行命令:
1 | myvar="hello world" npm run start |
所以最后,只需在npm脚本命令前面加上参数列表。