因此,我很努力地将命令行选项参数从npm传递到节点脚本。我可以自己传递选项,但不能传递键值对。
对于我的package.json我有:
"scripts": {
"test": ". ./.env; node app.js --"
},
(我的理解是,对于npm,您需要包含和附加“-”来传递参数) 在我的app.js中,我有:
const { argv, options } = require('yargs');
console.log(argv._);
我跑步时
$ npm run test FOO BAR
我得到:
['FOO','BAR']
很棒,可以,但是如果我尝试
$ npm run test FOO --BAR 99RedBalloons
我得到:
['FOO','99RedBallons']
和
$ npm运行测试FOO --BAR = 99RedBallons 给我:
['FOO']
什么?因此,我的问题确实是,使用“ run npm <>”并假设为yargs(因为我认为这是最受欢迎的软件包),如何获得带有[。“ FOO”,“ Bar”: 99RedBalloons“]。
谢谢!
答案 0 :(得分:2)
是的,您是对的,根据npm documentation,您必须传递额外的“-”来指定 npm 脚本的参数,但不要在右边传递它地方。
您不需要在package.json
“测试”脚本的末尾传递它,而直接在调用脚本的命令行中传递。
通过这种方式, npm 理解它是脚本的参数,而不是 npm 命令本身的参数:
// cli
$ npm run test -- FOO --BAR 99RedBalloons // "--" before arguments
/* or */
$ npm run test -- FOO --BAR=99RedBalloons
// package.json
"scripts": {
"test": ". ./.env; node app.js"
}
// app.js
const { argv } = require('yargs');
console.log(argv);
// -> { _: [ 'FOO' ], BAR: '99RedBalloons', '$0': 'app.js' }
我没有找到内置的 yargs 选项来执行此操作,但是,或者,如果您希望将所有参数放入_
数组变量中,则可以执行以下操作:
for (let cmd in argv)
if (cmd !== '$0' && cmd !== '_')
argv._[cmd] = argv[cmd]
console.log(argv._)
// -> [ 'FOO', BAR: '99RedBalloons' ]