npm脚本使用yargs将参数/参数传递给节点脚本

Sim*_*mon 13 javascript npm yargs

当用作npm脚本参数时,是否可以调出从yargs中检索密钥?

OSX终端中的用户类型:

npm run scaffold --name=blah
Run Code Online (Sandbox Code Playgroud)

在package.json中执行:

"scaffold" : "node ./scaffold/index.js -- "
Run Code Online (Sandbox Code Playgroud)

这导致了

const yargs = require('yargs').argv

if (yargs) {
  console.log(yargs);
  console.log(yargs.name);
  process.exit(1)
}
...
result:
{ _: [], '$0': 'scaffold/index.js' }
undefined
Run Code Online (Sandbox Code Playgroud)

这只适用于我在package.json中的硬编码"scaffold" : "node scaffold/index.js --name=blah",但我需要这个是可配置的.

正如我所说,我正在使用args,因为它似乎可以很容易地按名称检索密钥(而不是数组).接受建议.

我错过了什么?

更新11-07-2017 相关:将命令行参数发送到npm脚本

但是,传递命令行1: npm run scaffold name=hello OR会2: npm run scaffold --name=hello产生:

1: { _: [], '$0': 'scaffold/index.js' }
2: { _: [ 'name=hello' ], '$0': 'scaffold/index.js' }
Run Code Online (Sandbox Code Playgroud)

仍然看不到检索yargs.name财产的方法.仍未定义.


更新13-07-2017

暂时,我放弃了.这似乎是不可能的.我在终端中手动运行脚本.例如

node ./scaffold/index.js --name=blah 
Run Code Online (Sandbox Code Playgroud)

下图显示了直接执行节点脚本而不是运行npm脚本.我添加了https://www.npmjs.com/package/nopt节点模块以查看它是否有帮助(它没有).process.argv.name在运行npm脚本时仍未定义.

在此输入图像描述


更新18-07-2017

添加了github示例:https://github.com/sidouglas/stackoverflow-node-arguments


更新24-07-2017

在命令启动之前添加变量 myvar="hello npm run scaffold而不是npm run scaffold myvar="hello world"

sab*_*gen 5

从npm@2.0.0开始,您可以在执行脚本时使用自定义参数.getopt使用特殊选项来分隔选项的结尾.npm会将 - 之后的所有参数直接传递给你的脚本:

npm run test -- --grep="pattern"

https://docs.npmjs.com/cli/run-script


Cha*_*ase 5

我不确定在命令行上添加变量的位置是否重要,如果您对此不关心,则可以使用:

//package.json
{
  "name": "npm-test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "dependencies": {},
  "devDependencies": {},
  "scripts": {
    "start": "node index.js"
  },
  "author": "",
  "license": "ISC"
}    
Run Code Online (Sandbox Code Playgroud)

您的JS文件:

//index.js
console.log('myvar', process.env.myvar);    
Run Code Online (Sandbox Code Playgroud)

和您的命令行命令:

myvar="hello world" npm run start    
Run Code Online (Sandbox Code Playgroud)

因此,最后,只需在您的npm script命令前加上参数列表即可。


Bru*_*oLM 5

对我来说,以下内容适用于节点 10、12、14

npm run yourscript -- -- --name=bla
Run Code Online (Sandbox Code Playgroud)

我确实需要使用-- --

"yourscript": "node bla.js"
Run Code Online (Sandbox Code Playgroud)