目录结构
- 根目录:在项目根目录下创建一个
config
文件夹,用于存放所有与环境变量相关的配置。
- 环境文件夹:在
config
文件夹内,为每个环境(如 development
、production
、staging
等)创建一个单独的文件夹。例如:config/development
、config/production
。
- 团队配置文件夹:在每个环境文件夹内,为每个前端团队创建一个单独的文件夹。例如,假设团队名为
teamA
和 teamB
,则在 config/development
下有 teamA
和 teamB
文件夹。这样可以清晰地将不同团队在不同环境下的配置分开,避免冲突。
配置文件管理
- 团队专属配置文件:在每个团队的文件夹内,创建一个或多个配置文件来定义该团队的环境变量。例如,
config/development/teamA/env.js
,可以采用JavaScript模块导出的方式定义变量,如下:
module.exports = {
API_URL: 'http://dev-api-teamA.example.com',
// 其他团队A特有的环境变量
};
- 通用配置文件:在每个环境文件夹下创建一个通用配置文件,例如
config/development/common.js
,用于存放所有团队都可能用到的通用环境变量:
module.exports = {
BASE_URL: '/',
// 通用的环境变量
};
- 合并配置:使用工具(如
webpack - merge
)在构建过程中将通用配置和团队专属配置合并。以JavaScript为例:
const merge = require('webpack - merge');
const common = require('./config/development/common.js');
const teamA = require('./config/development/teamA/env.js');
const mergedConfig = merge(common, teamA);
module.exports = mergedConfig;
变量注入机制
- Webpack DefinePlugin:在Webpack配置中使用
DefinePlugin
来注入环境变量到前端代码中。例如:
const webpack = require('webpack');
const envConfig = require('./config/development/teamA/env.js');
module.exports = {
// 其他Webpack配置项
plugins: [
new webpack.DefinePlugin({
'process.env': JSON.stringify(envConfig)
})
]
};
- 运行时注入:也可以在前端应用启动时,通过动态加载配置文件的方式注入环境变量。例如,在前端代码中通过
fetch
获取配置文件,然后根据配置进行初始化。
持续集成/持续交付(CI/CD)流程
- 环境选择:在CI/CD工具(如GitHub Actions、GitLab CI/CD等)中,设置不同的构建步骤来选择不同的环境。例如,在
.gitlab-ci.yml
文件中:
stages:
- build
build:
stage: build
script:
- if [ "$CI_ENVIRONMENT_NAME" == "production" ]; then npm run build:prod; fi
- if [ "$CI_ENVIRONMENT_NAME" == "development" ]; then npm run build:dev; fi
- 配置文件传递:在CI/CD流程中,确保将正确的配置文件传递到构建环境中。例如,可以将
config
文件夹作为构建上下文的一部分传递。
- 验证与测试:在CI/CD流程中添加配置文件的验证步骤,确保配置的正确性,同时运行相关的单元测试和集成测试,验证环境变量在不同场景下的正确性。