将 NODE_ENV 传递到 Windows 10 的 npm 脚本中

Passing NODE_ENV into the npm script for Windows 10

我在 Typescript 项目中使用 webpack。我正在关注 tutorial,我在其中创建了 3 个 webpack 文件:

  1. webpack.common.js
  2. webpack.production.js
  3. webpack.development.js

在教程的 package.json 中,"scripts" 秒具有以下内容:

"build": "webpack --config webpack.$NODE_ENV.js"

我一直在研究 following SE Query 来为 Windows 10 设置 NODE_ENV

我在 PowerShell 中执行的位置:

$env:NODE_ENV="development"

然而一旦我执行 npm run build 脚本仍然将 $NODE_ENV 作为字符串并且不替换值。

如果这对我不起作用,我稍后可能会转向 cross-env,但我想在 PowerShell 中尝试使用环境变量。

什么是等效命令:

NODE_ENV=development npm run build
NODE_ENV=production npm run build

in windows 以及我应该如何更改 package.json 中的 scripts 即。 $NODE_ENV接受变量?

使用cross-env

通过执行以下操作,使用 cross-env 可以实现类似的效果:

  1. npm i --save-dev cross-env
  2. "scripts" 内添加:

     "build-dev": "cross-env NODE_ENV=development webpack --config webpack.%NODE_ENV%.js"
     "build-prod": "cross-env NODE_ENV=production webpack --config webpack.%NODE_ENV%.js"
    

    这应该会触发相应的脚本。

然而,这仍然无法让用户在设置 env 时灵活地 运行 通用 npm 脚本命令。变量 动态

PowerShell 限制

有一些示例表明查询建议执行以下操作:

  set NODE_ENV=production&& npm run build

但这在 PowerShell 中失败并出现以下错误:

At line:1 char:24
+ set NODE_ENV=production&& npm run build-dev
+                        ~~
The token '&&' is not a valid statement separator in this version.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : InvalidEndOfLine

并且 & 保留供将来使用。

像下面这样更改您的 package.json:

请注意,您必须更改所有 webpack.common.js、webpack.production.js、webpack.development.js

 webpack.common.js:

"build": "set NODE_ENV=development && webpack --config webpack.common.js"


 webpack.production.js:

"build": "set NODE_ENV=production && webpack --config webpack.production.js"


 webpack.development.js:

"build": "set NODE_ENV=development && webpack --config webpack.development.js"

我能够根据@ambienBeing 的评论解决这个问题。但是这里有一些注意事项:

  • &&PowerShell工作,但工作cmd
  • 而不是 $NODE_ENV 我需要在 "scripts" 部分中调整 %NODE_ENV%

    "build": "echo %NODE_ENV% && webpack --config webpack.%NODE_ENV%.js"
    

执行以下操作后:

 set NODE_ENV=production&&npm run build

脚本正确执行。

为了确定,我在各自的 webpack.x.js 文件中添加了 console.log("production")console.log("development")

我可以在控制台中看到相应的字符串打印两次:1 x 来自 echo 和 1 x 来自文件

测试

  • 当将默认 shell 更改为 cmd 而不是 PowerShell
  • 时,这与 VS Code 完美配合