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

Javascript npm脚本使用yargs将参数/参数传递给节点脚本,javascript,npm,yargs,Javascript,Npm,Yargs,当用作npm脚本参数时,是否可以调用从yargs检索密钥 OSX终端中的用户类型: npm run scaffold --name=blah 它在package.json中执行: "scaffold" : "node ./scaffold/index.js -- " 这导致 const yargs = require('yargs').argv if (yargs) { console.log(yargs); console.log(yargs.name); process.e

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

OSX终端中的用户类型:

npm run scaffold --name=blah
它在package.json中执行:

"scaffold" : "node ./scaffold/index.js -- "
这导致

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
“scaffold”:“node scaffold/index.js--name=blah”
中硬编码时,这才有效,但我需要它是可配置的

正如我所说的,我使用的是args,因为它似乎可以很容易地按名称检索键(与数组相反)。接受建议

我错过了什么

更新日期:2017年7月11日 相关的:

但是,传入命令行
1:npm run scaffold name=hello
2:npm运行脚手架--name=hello
产生:

1: { _: [], '$0': 'scaffold/index.js' }
2: { _: [ 'name=hello' ], '$0': 'scaffold/index.js' }
仍然无法找到检索
yargs.name
属性的方法。还没有定义


更新日期:2017年7月13日

目前,我已经放弃了。这似乎是不可能的。我在终端中手动运行脚本。 例如

下图显示了直接执行节点脚本,而不是通过npm脚本运行。我添加了节点模块,看看它是否有帮助(没有)<代码>进程.argv.name在运行npm脚本时仍然未定义


2017年7月18日更新

添加了github示例:


2017年7月24日更新

在命令开始工作之前添加变量
myvar=“hello npm run scaffold
与自npm@2.0.0,您可以在执行脚本时使用自定义参数。getopt使用特殊选项--来分隔选项的结尾。npm将直接将--之后的所有参数传递给您的脚本:

npm运行测试--grep=“pattern”


我不确定在命令行中添加变量的位置是否重要,如果这与您无关,那么这是可行的:

//package.json
{
  "name": "npm-test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "dependencies": {},
  "devDependencies": {},
  "scripts": {
    "start": "node index.js"
  },
  "author": "",
  "license": "ISC"
}    
您的JS文件:

//index.js
console.log('myvar', process.env.myvar);    
以及您的命令行命令:

myvar="hello world" npm run start    

因此,最后,只需在npm脚本命令前面加上参数列表即可。

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

npm run yourscript -- -- --name=bla
我确实需要使用
-->


这个答案不完整。我已经浏览过这个页面,读了几遍,又读了几遍。您复制并粘贴了这个示例。在我的示例中,如果我console.log您的
process.argv
,我仍然看不到在您的答案示例中检索process.argv上的
name
属性和
grep
参数的方法。如果可以使用您的代码(package.json、index.js等)创建公共GitHub存储库我可以尝试并调试它。非常有趣。将变量添加到命令的开头是有效的。最后,它失败了。感谢您的回答。很高兴您能理解它。我只是将一个新分支推到示例repo,其中包含更改,github不配合。
npm run yourscript -- -- --name=bla
"yourscript": "node bla.js"