Nodejs项目启动和编译根据命令参数使用不同的环境配置
使用process.env
来实现根据环境不同加载不同的配置,process.env
的官方介绍参考:process.env
使用介绍:Node.js中环境变量process.env的一些事详解
实现的效果
在package.json
的scripts
属性中增加以下配置
"scripts": {
"dev": "cross-env env_config=dev webpack-dev-server --inline --progress --config build/webpack.dev.conf.js ",
"test": "cross-env env_config=test webpack-dev-server --inline --progress --config build/webpack.dev.conf.js ",
"prod": "cross-env env_config=prod webpack-dev-server --inline --progress --config build/webpack.dev.conf.js ",
"start": "npm run dev",
"build": "cross-env env_config=dev node build/build.js",
"build:test": "cross-env env_config=test node build/build.js",
"build:prod": "cross-env env_config=prod node build/build.js"
},
这样就可以在项目中使用以下命令了:
npm run dev
以使用开发环境配置启动项目
npm run test
以测试环境配置启动项目
npm run prod
以生产环境配置启动项目
npm run build
以开发环境配置编译项目
npm run build:test
以测试环境配置编译项目
npm run build:prod
以生产环境配置编译项目
实现步骤
安装cross-env
参考:cross-env解决跨平台设置NODE_ENV的问题
config目录
先在项目的config
目录建立三个环境对应的配置文件
配置文件内容为需要在程序中根据环境切换的配置信息,例如:
dev.env.js
内容:
module.exports = {
NODE_ENV: '"development"',
BASE_API_URL: '"dev_API_Url"',
}
test.env.js
内容:
module.exports = {
NODE_ENV: '"production"',
BASE_API_URL: '"test_API_Url"',
}
build目录
修改build.js
修改spinner
用于提示当前以哪个环境编译项目。
var spinner = ora('building for '+ process.env.env_config+ ' environment...' )
spinner.start()
修改webpack.dev.conf.js (启动使用的配置)
在头部引入配置的地方,增加根据当前环境配置数据,动态引入环境对应的配置信息。
const env = require('../config/'+process.env.env_config+'.env')
在plugins
修改process.en
使用加载的env
plugins: [
new webpack.DefinePlugin({
'process.env':env
}),
修改webpack.prod.conf.js (编译使用的配置)
在头部引入配置的地方,增加根据当前环境配置数据,动态引入环境对应的配置信息。
const env = require('../config/'+process.env.env_config+'.env')
在plugins
修改process.en
使用加载的env
plugins: [
new webpack.DefinePlugin({
'process.env':env
}),
业务代码中使用
直接使用process.env
这个全局变量的属性就可以,不需要引入。
let baseUrl = process.env.BASE_API_URL;