1、多环境简介
在前端项目的开发过程中,我们需要把项目发布到不同服务器环境中,例如,测试,生产,开发,预生产等环境。在这个我们需要对不同的环境设置不同的属性或者配置,例如,生产环境,IP地址为123.66.11.33,而测试环境的IP地址为123.65.10.22,那这样我们需要事先定义好对应的IP地址,在打包过程中动态去加载对应的地址。这样就不要每次发布到不同环境,来回手动去改IP地址了。当然还有其他的打包配置。
2、多环境配置
Node.js假设它总是在生成环境中运行。通过设置Node_ENV=production,可以在生产环境向Node.js发出运行的信号。
这通常是通过执行命令来完成的
export NODE_ENV=production
在shell中,但最好将其放在shell配置文件中(例如带有bash shell的.bash_profile),因为否则在系统重新启动时,该设置将不会持久存在。
您也可以通过将环境变量前置到应用程序初始化命令中来应用环境变量:
NODE_ENV=production node app.js
这个环境变量也是一个在外部库中广泛使用的约定。
或者,我们可以创建配置的目录,为不同环境配置对应的属性。例如:pro.env.js
1. /** 2. * @description 生产环境下的接口地址配置 3. * @author jiang 4. */ 5. module.exports = { 6. NODE_ENV: '"production"', 7. API_ROOT: '"http://172.18.0.14:8080/vds/"', 8. API_SSO: '"http://172.18.0.14:8080/sso2/"', // sso 9. INDEX: '"http://172.18.0.14:8080/healthdegre-page/main.html"', // 系统首页 10. SYSTEM_NAME: '"health"' // 系统名称 11. };
将环境设置为生产环境通常可以确保:
- 日志记录保持在最低、基本的水平
- 需要更多的缓存级别来优化性能
例如,如果NODE_ENV未设置为生产,Express使用的模板库Pug将在调试模式下编译。在开发模式下,Express视图会在每个请求中编译,而在生产模式下,它们会被缓存。还有更多的例子。
您可以使用条件语句在不同的环境中执行代码:
1. if (process.env.NODE_ENV === 'development') { 2. // ... 3. } 4. if (process.env.NODE_ENV === 'production') { 5. // ... 6. } 7. if (['production', 'staging'].includes(process.env.NODE_ENV)) { 8. // ... 9. }
例如,在Express应用程序中,您可以使用它为每个环境设置不同的错误处理程序:
1. if () { 2. app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); 3. } 4. if (process.env.NODE_ENV === 'production') { 5. app.use(express.errorHandler()); 6. }
在实际项目开发过程中,我们更倾向于针对不同的环境,分别用一个文件来设置当前环境独有的配置信息。这样在目录这个层级中,我们就知道对应配置文件的作用是什么。
或者还有其他环境配置:
process.env.NODE_ENV === 'test' // 测试环境
process.env.NODE_ENV === 'pre-production' // 预生产环境,或者用 === 'staging'
在package.json 脚本运行任务,可以配置进行对应的配置。
1. "scripts": { 2. "dev": "node --max_old_space_size=4096 build/dev-server.js", 3. "build": "cross-env NODE_ENV=production node build/build.js", 4. "staging": "cross-env NODE_ENV=staging node build/build.js", 5. "dll": "webpack --config build/webpack.dll.config.js", 6. "test": "cross-env NODE_ENV=test_env node build/build.js" 7. },
3、命令运行
例如,我们可以shell中运行 npm run build,如下如所示: