环境变量扩展不再适用于 Windows 上的 npm 运行

Environment variable expansion not longer works in npm run on Windows

我有使用环境变量的 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

无法在 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 的一般情况,这将起作用。