【问题标题】:Passing key value arguments from npm从 npm 传递键值参数
【发布时间】:2019-04-09 22:57:25
【问题描述】:

所以我正在努力将命令行选项参数从 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 run test FOO --BAR=99RedBallons 给我:

['FOO']

什么?所以,我的问题真的是,使用“run npm ”并且我假设 yargs(因为我相信这是最流行的包),我怎么能用 ["FOO", "Bar" 的 arg._ 到达:" 99个红气球”]。

谢谢!

【问题讨论】:

  • 你试过 npm run test FOO Bar 99RedBallons 吗?
  • 我有,这给了我 ['FOO', 'Bar', '99RedBalloons']
  • npm 如何将命令行参数传递给节点脚本对我来说有些奇怪
  • 我以为您想要您在评论中所说的确切结果和问题的结尾。

标签: node.js npm arguments command-line-interface yargs


【解决方案1】:

是的,你是对的,根据npm documentation,你必须传递额外的“--”来指定npm脚本的参数,但是你没有在正确的地方传递它。

您不需要在package.json“test”脚本的末尾传递它,而是直接在调用脚本的命令行中传递它。

这样,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' ]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-02
    • 2016-05-09
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 2020-11-07
    • 1970-01-01
    • 2017-04-02
    相关资源
    最近更新 更多