将多个变量传递给 package.json 脚本

Posted

技术标签:

【中文标题】将多个变量传递给 package.json 脚本【英文标题】:Pass more than one variable to a package.json script 【发布时间】:2018-10-08 09:27:54 【问题描述】:

我在 package.json 中有(不是 BASH,不是 SH,不是 ZSHELL,不是 FISH)。

所以在我们确定这是我的 package.json 文件这一事实之后,让我将它呈现给您:

package.json

  "scripts": 
    "dev": "NODE_ENV=myValue myProgram"
  

我想在上面的文件中添加更多变量(例如MYVAR=myOtherValue),这是我的 package.json 文件。我该怎么做(向我的 package.json 文件添加更多变量)?

让我明确一点,我不想阅读 bash 或 zshell、fish 或 sh 的联机帮助页。这就是为什么我把问题放在这里但没有阅读手册页的原因——否则我不会把它放在这里,而是会阅读手册页。感谢您的理解。

【问题讨论】:

空格分隔例如NODE_ENV=myValue MYVAR=myOtherValue myProgram 见***.com/questions/26189662/… How set multiple env variables for a bash command的可能重复 它不是重复的。我在问 nodeJs 和 package.json。从开发人员的角度来看(假设我使用 Windows),这与 bash 完全无关。 (相信我,我们有 99% 的 Windows 开发人员在他们的一生中从未听说过 bash,不需要也不想) 请不要将答案缩减为只包含一个单行。提供附加信息是为了呈现上下文。 我没有问过 bash 【参考方案1】:

你的脚本应该是:

"dev": "NODE_ENV=myValue MYVAR=myOtherValue myProgram"

因为您可以在空格分隔时添加多个环境变量。

这源于 bash 等终端的常见行为,您可以在其中动态设置多个环境变量:

FOO1=baz FOO2=fnord FOO3=baz env | grep FOO
FOO1=baz
FOO2=fnord
FOO3=baz

【讨论】:

我不关心这个问题中的 gnu 工具 bash 或 grep。 @nottinhill 公平点,但它有助于理解为什么这种方法有效。【参考方案2】:

我和 Stevek 一起讨论这个问题,我阅读了答案(重复的答案)并且对 bash 的引用感到沮丧。我在使用 Powershell 的 Windows 系统上。我想传递多个环境变量并让它在使用 Powershell 的 Windows 系统中工作。除非启用跨系统使用,否则对 *nix 命令等的任何引用都是在搅浑水。

到目前为止,这个答案还没有回答。所以将添加我发现的内容

这个问题告诉你如何传递 1 个变量。 How to set environment variables from within package.json

 "start": "set NODE_ENV=YOURENV&&node start.js"

现在如何传递超过1?这仍然是个问题。

有人告诉我使用 cross-env 是最好的: cross-env NODE_ENV=production my-command

这里给出了答案:https://github.com/kentcdodds/cross-env/issues/15

"scripts": 
  "debug": "cross-env NODE_PATH=. DEBUG=app:* nodemon bootload.js"

但是,cross-env 不使用 PowerShell,而是在 windows 上贬低了 cmd shell。所以回到主要问题。 [除非你做出这个改变https://github.com/kentcdodds/cross-env/issues/192#issuecomment-513341729]

【讨论】:

以上是关于将多个变量传递给 package.json 脚本的主要内容,如果未能解决你的问题,请参考以下文章

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

将相同的参数传递给 package.json 中多个脚本的节点

通过 PM2 将环境变量传递给 NextJS

将参数从脚本传递给 gulp 任务

通过命令行将变量传递给powershell脚本

将变量传递给 Subprocess.Popen