将 NODE_ENV 传递到 Windows 10 的 npm 脚本中
Passing NODE_ENV into the npm script for Windows 10
我在 Typescript 项目中使用 webpack
。我正在关注 tutorial,我在其中创建了 3 个 webpack
文件:
webpack.common.js
webpack.production.js
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
可以实现类似的效果:
npm i --save-dev cross-env
在 "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 完美配合
我在 Typescript 项目中使用 webpack
。我正在关注 tutorial,我在其中创建了 3 个 webpack
文件:
webpack.common.js
webpack.production.js
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
可以实现类似的效果:
npm i --save-dev cross-env
在
"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 完美配合