当前位置: 首页 > 知识库问答 >
问题:

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

钱和平
2023-03-14

当用作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,因为它似乎可以很容易地按名称检索键(与数组相反)。接受建议。

我错过了什么?

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

但是,传入命令行1: npm run scaffold name=HelloOR2: npm run scaffold--name=Hello会产生:

1: { _: [], '$0': 'scaffold/index.js' }
2: { _: [ 'name=hello' ], '$0': 'scaffold/index.js' }

仍然无法找到检索yargs.name属性的方法。还没有定义。

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

node ./scaffold/index.js --name=blah 

下图显示了直接执行节点脚本,而不是通过npm脚本运行。我补充说https://www.npmjs.com/package/nopt 节点模块,查看它是否有帮助(没有)<代码>进程.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”

共有3个答案

支阳波
2023-03-14

对我来说,节点10、12、14的以下工作

npm run yourscript -- -- --name=bla

我确实需要使用-->

"yourscript": "node bla.js"
乐欣可
2023-03-14

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

//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脚本命令的前缀。

靳高明
2023-03-14

npm@2.0.0,您可以在执行脚本时使用自定义参数。这个特殊的选项--被getopt用来分隔选项的结尾。npm将把--之后的所有参数直接传递到你的脚本

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

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

 类似资料:
  • 问题内容: 我有一个名为的MySQL脚本文件,其中包含: 我在MySQL控制台中,如何将参数传递给脚本?这不会转发变量: 问题答案: 您可以使用用户变量来实现您描述的行为。在将变量用作模式标识符而不是数据值时,必须使用准备好的语句,以便可以动态组成查询。 : 调用为

  • 我正在尝试从使用自由式詹金斯构建切换到管道项目。 我喜欢它的许多方面,但我希望我可以使用多分支管道,因为它更适合我们公司,但目前这不是一个选择。 我们目前所做的是创建一个名为

  • 是否有方法在package.json命令内传递参数? cli 然后在上,我想用获取参数

  • 问题内容: 是否可以通过命令行将参数传递给MySQL脚本? 在此示例中,类似于@start_date的内容: 问题答案: 发现在网络上的答案在这里。 基本上,假设我们要运行以下查询: 我们可以这样传递“ start_date”和“ end_date”:

  • 问题内容: 我有一个Linux bash脚本“ myshell”。我希望它读取两个日期作为参数,例如:。我是Java程序员,但不知道如何编写脚本来完成此任务。 脚本的其余部分如下所示: 问题答案: 您在脚本中使用,例如

  • 如果不满足所需的参数计数,我希望我的Bash脚本打印一条错误消息。 由于某种未知的原因,我出现了以下错误: 我做错了什么?