什么是 cross-env ?

11,238 阅读1分钟

前提

起因是在看 vue-i18n 的源码,在 package.jsonscript 中,

"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