Les variables d'entorn són una manera poderosa de configurar el comportament de les aplicacions sense haver de modificar el codi font. En el context de Webpack, les variables d'entorn es poden utilitzar per definir configuracions específiques per a diferents entorns (per exemple, desenvolupament, producció, proves). Aquest tema cobrirà com configurar i utilitzar variables d'entorn amb Webpack.
Continguts
Què són les Variables d'Entorn?
Les variables d'entorn són valors dinàmics que poden afectar el comportament dels processos en un sistema operatiu. En el desenvolupament de programari, s'utilitzen sovint per:
- Configurar diferents entorns (desenvolupament, producció, proves).
- Emmagatzemar informació sensible (com ara claus API).
- Personalitzar el comportament de l'aplicació sense canviar el codi font.
Configuració de Variables d'Entorn amb Webpack
Pas 1: Instal·lar dotenv
Per gestionar les variables d'entorn, utilitzarem el paquet dotenv
. Aquest paquet carrega variables d'entorn des d'un fitxer .env
al process.env
de Node.js.
Pas 2: Crear un fitxer .env
Crea un fitxer .env
a l'arrel del teu projecte i defineix les variables d'entorn que necessitis. Per exemple:
Pas 3: Configurar Webpack per utilitzar dotenv
Modifica el fitxer de configuració de Webpack (webpack.config.js
) per carregar les variables d'entorn utilitzant dotenv
i el plugin DefinePlugin
de Webpack.
const path = require('path'); const webpack = require('webpack'); const dotenv = require('dotenv'); // Carregar variables d'entorn des del fitxer .env const env = dotenv.config().parsed; // Convertir les variables d'entorn en un format que DefinePlugin pugui utilitzar const envKeys = Object.keys(env).reduce((prev, next) => { prev[`process.env.${next}`] = JSON.stringify(env[next]); return prev; }, {}); module.exports = { entry: './src/index.js', output: { path: path.resolve(__dirname, 'dist'), filename: 'bundle.js' }, plugins: [ new webpack.DefinePlugin(envKeys) ], mode: 'development' };
Exemple Pràctic
Suposem que tenim una aplicació que necessita una URL d'API diferent segons l'entorn. Podem utilitzar les variables d'entorn per gestionar això.
Fitxer .env
Fitxer src/index.js
Fitxer webpack.config.js
const path = require('path'); const webpack = require('webpack'); const dotenv = require('dotenv'); const env = dotenv.config().parsed; const envKeys = Object.keys(env).reduce((prev, next) => { prev[`process.env.${next}`] = JSON.stringify(env[next]); return prev; }, {}); module.exports = { entry: './src/index.js', output: { path: path.resolve(__dirname, 'dist'), filename: 'bundle.js' }, plugins: [ new webpack.DefinePlugin(envKeys) ], mode: 'development' };
Executar Webpack
Quan executis el codi, hauries de veure les variables d'entorn impreses a la consola.
Exercicis Pràctics
- Exercici 1: Crea un fitxer
.env
amb una variable d'entornAPP_NAME
i mostra el seu valor a la consola utilitzant Webpack. - Exercici 2: Configura Webpack per utilitzar diferents fitxers
.env
per a desenvolupament i producció. Per exemple,.env.development
i.env.production
.
Solucions
Solució Exercici 1:
- Crea un fitxer
.env
:
- Modifica
webpack.config.js
:
const path = require('path'); const webpack = require('webpack'); const dotenv = require('dotenv'); const env = dotenv.config().parsed; const envKeys = Object.keys(env).reduce((prev, next) => { prev[`process.env.${next}`] = JSON.stringify(env[next]); return prev; }, {}); module.exports = { entry: './src/index.js', output: { path: path.resolve(__dirname, 'dist'), filename: 'bundle.js' }, plugins: [ new webpack.DefinePlugin(envKeys) ], mode: 'development' };
- Modifica
src/index.js
:
- Executa Webpack:
Solució Exercici 2:
- Crea dos fitxers
.env
:
.env.development
:
.env.production
:
- Modifica
webpack.config.js
per carregar el fitxer.env
correcte segons l'entorn:
const path = require('path'); const webpack = require('webpack'); const dotenv = require('dotenv'); const fs = require('fs'); module.exports = (env) => { const currentPath = path.join(__dirname); const basePath = currentPath + '/.env'; const envPath = basePath + '.' + env.ENVIRONMENT; const finalPath = fs.existsSync(envPath) ? envPath : basePath; const fileEnv = dotenv.config({ path: finalPath }).parsed; const envKeys = Object.keys(fileEnv).reduce((prev, next) => { prev[`process.env.${next}`] = JSON.stringify(fileEnv[next]); return prev; }, {}); return { entry: './src/index.js', output: { path: path.resolve(__dirname, 'dist'), filename: 'bundle.js' }, plugins: [ new webpack.DefinePlugin(envKeys) ], mode: env.ENVIRONMENT === 'production' ? 'production' : 'development' }; };
- Executa Webpack amb l'entorn desitjat:
Conclusió
Les variables d'entorn són una eina essencial per gestionar configuracions dinàmiques en aplicacions. Amb Webpack, podem utilitzar el paquet dotenv
i el plugin DefinePlugin
per carregar i utilitzar aquestes variables de manera eficient. Això ens permet tenir configuracions específiques per a diferents entorns sense haver de modificar el codi font, millorant així la flexibilitat i mantenibilitat del nostre projecte.
Curs de Webpack
Mòdul 1: Introducció a Webpack
- Què és Webpack?
- Configuració de Webpack
- Fitxer de Configuració de Webpack
- Construcció Bàsica amb Webpack
Mòdul 2: Conceptes Bàsics
Mòdul 3: Configuració Avançada
Mòdul 4: Eines de Desenvolupament
Mòdul 5: Optimització per a Producció
Mòdul 6: Integracions i Tècniques Avançades
- Integració amb Babel
- Integració amb TypeScript
- Ús de Webpack amb React
- Ús de Webpack amb Vue
- Plugins i Loaders Personalitzats
Mòdul 7: Projectes del Món Real
- Configuració d'un Projecte React
- Configuració d'un Projecte Vue
- Configuració d'un Projecte Node.js
- Migració de Projectes Heretats a Webpack