如何传递参数并将这些参数用作 package.json 脚本中的变量? [复制]

Posted

技术标签:

【中文标题】如何传递参数并将这些参数用作 package.json 脚本中的变量? [复制]【英文标题】:How to pass arguments and use those arguments as variables in a package.json script? [duplicate] 【发布时间】:2020-03-03 13:01:13 【问题描述】:
"scripts": 
    "cr": "git commit -am $message && git pull origin master --rebase && git push --force",

我正在尝试弄清楚如何使用以下内容运行上述内容:

# yarn cr "commit message"

【问题讨论】:

似乎作为 shell 别名会更好?确保使用--force-with-lease 来避免比赛。 您可以尝试修改整个 package.json 文件以替换它的任何部分。你需要先解析JSON,然后改变对应的key值,然后将生成的JSON字符串化并保存到文件中。 我觉得必须有一个简单的解决方案?并且 shell 别名可以工作,但我希望任何拉下项目的人都可以轻松地重复使用它。 【参考方案1】:

sh -c 'shell_command' 模式适用于 *nixWindows Powershell。然后,您可以使用$0$1 等来访问命令行参数。所以把这个写在你的package.json

"scripts": 
    "cr": "sh -c 'git commit -am $0 && git pull origin master --rebase && git push --force'",

现在您可以在终端中运行此命令:

yarn cr commit_message

【讨论】:

当 npm 使用的默认 shell 是 cmd.exe 时,这将在 Windows 上失败 感谢您的意见。我在 Ubuntu 和 Windows Powershell 上对其进行了测试,效果很好。 确定 Ubuntu 是 *nix 在这种情况下 npm 默认使用 sh。 Powershell 通常默认使用cmd。 npm docs 状态:“默认情况下,在类 Unix 系统上是 /bin/sh 命令,在 Windows 上是 cmd.exe。”。要获得真正的跨平台兼容性,您需要从 node.js 脚本中脱壳 - 例如,请参阅我的答案 here。【参考方案2】:

是的。 你可以做这样的事情

"scripts": 

  "cr": "f() git commit -am $1;;f",



yarn run cr -- 'commit message'

您可以传递 n 个以空格分隔的参数,并且可以通过 $1 ,$2 .. 访问。

【讨论】:

当 npm 使用的默认 shell 为 cmd.exe 时,这将在 Windows 上失败 这将适用于 unix。请在 windows 中使用 gitbash

以上是关于如何传递参数并将这些参数用作 package.json 脚本中的变量? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何选择来自脚本输出的参数并将其传递给 Bamboo 中的下一个脚本或作业?

如何转义任意字符串以用作 Bash 中的命令行参数?

通过查询填充下拉框并将内容用作链接参数(Pentaho)

如何返回地理位置响应对象以用作另一个函数的参数

在 Apache Ant 中,有没有办法从 ant 命令中获取参数并将其用作属性文件的键?

传递 opencv inputarray 并将其用作 std::vector