Setting Up Environment-Specific Configurations in Angular
Learn how to manage different configurations for development, testing, and production environments in Angular.
0 likes
187 views
Rule Content
{
"title": "Setting Up Environment-Specific Configurations in Angular",
"description": "Learn how to manage different configurations for development, testing, and production environments in Angular.",
"category": "Angular Cursor Rules",
"rules": [
{
"name": "Define Environment Files",
"description": "Create separate environment files for each environment to manage specific configurations.",
"code": [
{
"filename": "src/environments/environment.ts",
"content": "export const environment = {\n production: false,\n apiUrl: 'https://dev-api.example.com',\n featureXEnabled: true,\n};"
},
{
"filename": "src/environments/environment.prod.ts",
"content": "export const environment = {\n production: true,\n apiUrl: 'https://api.example.com',\n featureXEnabled: false,\n};"
}
]
},
{
"name": "Configure Angular CLI for Environment Files",
"description": "Set up Angular CLI to replace environment files based on the build configuration.",
"code": [
{
"filename": "angular.json",
"content": "{\n \"projects\": {\n \"your-project-name\": {\n \"architect\": {\n \"build\": {\n \"configurations\": {\n \"production\": {\n \"fileReplacements\": [\n {\n \"replace\": \"src/environments/environment.ts\",\n \"with\": \"src/environments/environment.prod.ts\"\n }\n ]\n }\n }\n }\n }\n }\n }\n}"
}
]
},
{
"name": "Access Environment Variables in Code",
"description": "Import and use environment variables in your application components and services.",
"code": [
{
"filename": "src/app/app.component.ts",
"content": "import { Component } from '@angular/core';\nimport { environment } from '../environments/environment';\n\n@Component({\n selector: 'app-root',\n templateUrl: './app.component.html',\n styleUrls: ['./app.component.css']\n})\nexport class AppComponent {\n title = 'angular-app';\n apiUrl = environment.apiUrl;\n featureXEnabled = environment.featureXEnabled;\n}"
}
]
},
{
"name": "Avoid Hardcoding Sensitive Information",
"description": "Do not store sensitive data like API keys directly in environment files. Use secure methods to inject them at build or runtime.",
"code": [
{
"filename": "src/environments/environment.ts",
"content": "export const environment = {\n production: false,\n apiUrl: process.env.API_URL,\n featureXEnabled: true,\n};"
},
{
"filename": "generate-env.js",
"content": "const fs = require('fs');\nconst dotenv = require('dotenv');\n\ndotenv.config();\n\nconst envConfig = `export const environment = {\n production: ${process.env.PRODUCTION === 'true'},\n apiUrl: '${process.env.API_URL}',\n featureXEnabled: ${process.env.FEATURE_X_ENABLED === 'true'},\n};`;\n\nfs.writeFileSync('src/environments/environment.ts', envConfig);"
}
]
},
{
"name": "Use EnvironmentService for Configuration Management",
"description": "Create a service to manage environment configurations, enhancing flexibility and maintainability.",
"code": [
{
"filename": "src/app/services/environment.service.ts",
"content": "import { Injectable } from '@angular/core';\nimport { environment } from '../../environments/environment';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EnvironmentService {\n get apiUrl(): string {\n return environment.apiUrl;\n }\n\n get isProduction(): boolean {\n return environment.production;\n }\n\n get featureXEnabled(): boolean {\n return environment.featureXEnabled;\n }\n}"
},
{
"filename": "src/app/app.component.ts",
"content": "import { Component } from '@angular/core';\nimport { EnvironmentService } from './services/environment.service';\n\n@Component({\n selector: 'app-root',\n templateUrl: './app.component.html',\n styleUrls: ['./app.component.css']\n})\nexport class AppComponent {\n title = 'angular-app';\n\n constructor(private envService: EnvironmentService) {\n console.log('API URL:', this.envService.apiUrl);\n console.log('Production Mode:', this.envService.isProduction);\n console.log('Feature X Enabled:', this.envService.featureXEnabled);\n }\n}"
}
]
}
]
}