前提
起因是在看 vue-i18n 的源码,在 package.json 的 script 中,
"scripts": {
"dev": "cross-env BABEL_ENV=test webpack-dev-server --inline --hot --open --content-base ./test/unit/ --config config/webpack.dev.conf.js"
},
解决问题
当设置环境变量为 NODE_ENV=production 时,易造成 Windows 命令的阻塞。(除了 Windows 上的 Bash,因其使用本机 Bash)
cross-env 使用单个命令,而不用担心环境变量的设置。像运行在 POSIX系统 上一样进行设置,cross-env 可以进行正确的设置。
一、安装
npm install --save-dev cross-env
NOTE:
cross-env 7 仅支持 Node.js >=10
cross-env 6 需要使用npm install --save-dev cross-env@6
二、用法
// package.json
"scripts": {
"build": "cross-env NODE_ENV=production webpack --config build/webpack.config.js"
}
2.1、配置 Babel
"scripts": {
"dev": "cross-env BABEL_ENV=test webpack-dev-server --inline --hot --open --content-base ./test/unit/ --config config/webpack.dev.conf.js",
}
Babel 将根据当前环境来开启 env 下的配置。
即可使用 .babelrc 文件来配置 Babel。当然也可以在 scripts 中配置 BABEL_ENV=test。
当前环境可通过 process.env.BABEL_ENV 来获得。如果 BABEL_ENV 不可用,将会替换成 NODE_ENV。若 NODE_ENV 也未设置,那缺省值为 development。
这个来源于 Express Web 服务器框架,通过 NODE_ENV 判断服务器应在 开发 还是 生产 模式下运行。在运行时,脚本通过检查 process.env.NODE_ENV 查找该值。
(持续更新中···)
参考文献
[1]. Jest - Getting Started
[2]. Building Better Bundles: Why process.env.NODE_ENV Matters for Optimized Builds
[3]. Node - process.env