Javascript npm脚本使用yargs将参数/参数传递给节点脚本
当用作npm脚本参数时,是否可以调用从yargs检索密钥 OSX终端中的用户类型: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 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"