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

Sha*_*sai 8 javascript environment-variables node.js webpack npm-scripts

webpack在打字稿项目中使用。我正在学习创建 3 个文件的教程webpack

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

在本教程中package.json"scripts"秒数如下:

"build": "webpack --config webpack.$NODE_ENV.js"
Run Code Online (Sandbox Code Playgroud)

我一直在研究以下 SE 查询来设置NODE_ENVWindows 10。

我在 PowerShell 中执行的位置:

$env:NODE_ENV="development"
Run Code Online (Sandbox Code Playgroud)

但是,一旦我执行npm run build脚本仍然采用$NODE_ENV字符串并且不替换值。

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

什么应该是等效的命令:

NODE_ENV=development npm run build
NODE_ENV=production npm run build
Run Code Online (Sandbox Code Playgroud)

在Windows和我应该如何改变scripts,我package.json$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"
    
    Run Code Online (Sandbox Code Playgroud)

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

然而,这仍然没有为用户提供在设置 env 时运行通用 npm 脚本命令的灵活性。变量上飞

PowerShell 限制

在某些示例中,查询建议执行以下操作:

  set NODE_ENV=production&& npm run build
Run Code Online (Sandbox Code Playgroud)

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

"build": "webpack --config webpack.$NODE_ENV.js"
Run Code Online (Sandbox Code Playgroud)

&保留供将来使用。

Sha*_*sai 5

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

  • && 不会在工作PowerShell,但WORKScmd
  • 而不是$NODE_ENV我需要适应%NODE_ENV%"scripts"部分

    "build": "echo %NODE_ENV% && webpack --config webpack.%NODE_ENV%.js"
    
    Run Code Online (Sandbox Code Playgroud)

在执行以下操作时:

 set NODE_ENV=production&&npm run build
Run Code Online (Sandbox Code Playgroud)

脚本被正确执行。

为了肯定的是,我加入console.log("production")以及console.log("development")在相应的webpack.x.js文件

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

测试

  • 当将默认 shell 更改为cmd而不是PowerShell