不同环境使用不同变量的文章最后介绍了cross-env

724 阅读1分钟

项目打包build针对不同环境,设置环境变量取不同取值。 例如,名字为ELECTRON_NODE_INTEGRATION相同环境变量在development环境,test环境,production环境下分别取值不同。

tips:设置 ELECTRON_NODE_INTEGRATION 目的是为设置渲染器页面是否可以使用node语法

通常的做法在package.json设置如下:

"scripts":{
  'electron:serve: ELECTRON_NODE_INTEGRATION=true vue-cli-service electron:serve'
  ... 
}

但是如果变量很多,就不能用上述方法了,考虑把很多变量写到文件中(利用自定义模式需要通过.env文件进行配置),通过运行命令,找到适配文件

.env文件分为以下类型:

  • .env , 在所有的环境中被载入
  • .env.local , 在所有的环境中被载入,但会被 git 忽略
  • .env.[mode] , 只在指定的模式中被载入
  • .env.[mode].local, 只在指定的模式中被载入,但会被 git 忽略
"scripts":{
  'electron:serve-development: vue-cli-service electron:serve --mode development',
  'electron:serve-test: vue-cli-service electron:serve --mode test',
  'electron:serve-producton: vue-cli-service electron:serve --mode producton'
  ... 
}

分别在项目根目录新建.env.development.env.test.env.production文件 配置变量不同取值

例如

.env.development 配置如下
ELECTRON_NODE_INTEGRATION = true
ELECTRON_NODE_CONTEXTISOLATION = false

.env.test 配置如下
ELECTRON_NODE_INTEGRATION = true
ELECTRON_NODE_CONTEXTISOLATION = true

.env.production 配置如下
ELECTRON_NODE_INTEGRATION = false
ELECTRON_NODE_CONTEXTISOLATION = false

上述2种方式,如果是不同平台,可能有不适配的问题,(例如windows 与 mac 环境变量的设置不同)

使用cross-env可以设置在不同的平台上有相同的NODE_ENV参数

在大多数Windows命令行中在使用NODE_ENV = production设置环境变量时会报错。同样,Windows和Linux命令如何设置环境变量也有所不同。

为了解决该问题,cross-env就派上用途了

用法 :

"scripts":{
  'electron:serve-development:cross-env vue-cli-service electron:serve --mode development',
  'electron:serve-test:cross-env vue-cli-service electron:serve --mode test',
  'electron:serve-producton:cross-env  vue-cli-service electron:serve --mode producton'
  ... 
}