【问题标题】:Environment variable expansion not longer works in npm run on Windows环境变量扩展不再适用于 Windows 上的 npm run
【发布时间】:2021-03-25 00:04:59
【问题描述】:

我有使用环境变量的 npm 脚本。这是package.json的摘录:

"scripts": {
    "staging": "npm run deploy -env=staging",
    "deploy": "winrs /r:intranet /d:F:\\wwwintranet\\deploy npm run build -env=%npm_config_env%",

到目前为止,-env=%npm_config_env% 已扩展为 -env=staging 或其他。突然它停止工作了。这可能是由于 npm 从 6.x 更新到 7.x。

当我使用"deploy": "set & winrs /r:intranet /d:F:\\wwwintranet\\deploy npm run build -env=%npm_config_env%" 进行测试时,我可以确认变量仍然设置。

作为临时解决方案,将 npm 降级到版本 6.x (npm install -g npm@6) 有所帮助。不过,我需要一个在未来也可以使用的解决方案。

如何为 npm 7.x 再次启用变量扩展?或者使用 npm 7.x 传递环境变量的替代方法是什么?

编辑

这是 npm 7.5.x 中的一个错误。它已在 npm 7.7.0 及更高版本中修复(请参阅https://github.com/npm/cli/issues/2731

【问题讨论】:

  • 可能与this rfcs有关。但是,将"staging": "npm run deploy -env=staging" 更改为"staging": "npm run deploy --env=staging"(即前缀env 和双连字符) 有什么不同吗?
  • @RobC 是的,阅读你链接的 npm-rfc,我认为这可能是问题所在,但与那里所说的相反,环境变量在 Windows cmd 中设置得很好i> (请参阅问题中的 set 命令),但它们没有扩展。不,双连字符没有影响。

标签: windows npm environment-variables package.json variable-expansion


【解决方案1】:

在 Windows 上扩展环境变量失败似乎是 a recent high-priority known bug in the npm CLI

在发布修复程序之前,有几个选项可用作解决方法。

  • 您可以降级到版本 6.x,直到此问题得到解决。
  • 这不适用于您的具体情况(见下文),但在大多数情况下,您可以使用npx 来使用npm@6
npx -p npm@6 npm run deploy
  • 您可以尝试降级到 7.x 的早期版本,以查看该错误是否一直存在于 7.x 中。从 7.0.0 开始,然后从那里开始。

npx 建议在这里不起作用,因为deploy 会调用npm 本身,并且会使用PATH 中的npm,即npm@7。但对于需要在狭义情况下调用旧版本 npm 的一般情况,这将起作用。

【讨论】:

  • 谢谢。我没有找到这个错误报告
  • npx 解决方案无法按照您建议的方式工作,因为在解析该行时变量扩展不起作用。当我在这里使用它"staging": "npx -p npm@6 npm run deploy -env=staging" 时,我会测试它是否有效。测试后我会更新问题。
  • 不幸的是,npx 的解决方法不起作用
  • 啊,太糟糕了。您仍然可以从命令行以这种方式使用npx,它几乎肯定会起作用。所以在这种情况下:npx -p npm@6 npm run deploy 并保持 package.json 与原来的保持不变。我会更新答案来代替。
  • 哦,等等,但是 package.json 运行 npm 并且可能选择与 npx 运行的不同的 npm。嗯....是的,这仍然不适用于您的情况,但适用于不涉及从npm-script 调用npm 的任何情况。
猜你喜欢
  • 2020-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-23
  • 1970-01-01
  • 1970-01-01
  • 2015-05-03
  • 2016-03-08
相关资源
最近更新 更多