Rollup Env Config Multi-Env Build
Rollup supports dynamically managing environment variables through configuration files. Developers can define variables for different environments using rollup.config.js or rollup.config.{env}.js files. For example:
- Development Environment: Use
process.env.DEV_MODE === 'true'to determine if development mode is enabled. - Test Environment: Control test logic via
process.env.TEST_MODE === 'true'. - Production Environment: Trigger production optimizations using
process.env.PROD_MODE === 'true'.
Environment variables can be accessed directly through process.env, for example:
// rollup.config.dev.js
export default {
// ...
onwarn(error, { template }) {
if (process.env.DEV_MODE) {
console.warn(error);
}
return template(error);
},
};
Developers can separate environment variables into .env files and load them using dotenv, for example:
# .env.dev
DEV_MODE=true
# .env.prod
PROD_MODE=true
Multi-Environment Build Strategies
Rollup supports distinguishing different environments through build commands and configuration files, ensuring flexibility in the build process:
- Build Command Distinction
Userollup -cto specify a configuration file, for example:
Each configuration file contains variable definitions corresponding to its environment, such as:# Development build rollup -c rollup.config.dev.js # Production build rollup -c rollup.config.prod.js// rollup.config.prod.js export default { plugins: [ require('unplugin-auto-import')({ importMap: require('./import-map.json'), }), require('unplugin-auto-import')({ importMap: require('./import-map.json'), mode: 'production', }), ], output: { dir: 'dist', format: 'esm', sourcemap: process.env.PROD_MODE, }, }; - Dynamic Configuration Loading
Switch configurations dynamically viaprocess.env, for example:
During the build, the corresponding import map and output format are selected based on environment variables.// rollup.config.js export default { plugins: [ require('unplugin-auto-import')({ importMap: process.env.ENV === 'dev' ? require('./import-map.dev') : require('./import-map.prod'), }), ], output: { dir: 'dist', format: process.env.ENV === 'prod' ? 'cjs' : 'esm', }, }; - CI/CD Pipeline Integration
In continuous integration, the build process can be controlled via environment variables:- GitHub Actions:
jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set environment uses: actions/electron-env@v2 with: env: ${{ params.env }} - name: Build uses: rollup/actions/build@v2 with: config: ${{ params.config }} - GitLab CI:
build: script: - npm install - if [[ "$CI_ENVIRONMENT_NAME" == "production" ]]; then npm run build:prod; else npm run build:dev; fi
- GitHub Actions:
Configuration Management Best Practices
- Environment Isolation: Separate configuration files for different environments to avoid polluting global variables.
- Version Control: Include environment variable configurations in the version control system (e.g.,
git add .env). - Security Hardening: Disable debug outputs in development mode, such as:
if (process.env.DEV_MODE) { console.error('⚠️ Dev mode is enabled. Debug outputs are disabled.'); } - Dynamic Loading: Implement on-demand configuration loading via
rollup.config.{env}.jsto reduce the number of files during the build.
Code Examples
// rollup.config.dev.js
export default {
plugins: [
require('unplugin-auto-import')({
importMap: require('./import-map.dev'),
}),
],
output: {
dir: 'dist',
format: 'esm',
sourcemap: process.env.DEV_MODE,
},
};
// rollup.config.prod.js
export default {
plugins: [
require('unplugin-auto-import')({
importMap: require('./import-map.prod'),
mode: 'production',
}),
],
output: {
dir: 'dist',
format: 'cjs',
sourcemap: process.env.PROD_MODE,
},
};
Summary
Rollup achieves flexible build strategies through environment variable configuration. Developers can load configuration files for different environments as needed, ensuring maintainability and security of the build process. Proper management of environment variables and configuration files can significantly improve build efficiency and code quality.