WebPack Loader
Un loader è un processore che elabora il contenuto di un file risorsa (.js, .css e via dicendo). E' un concetto molto importante nell'ecosistema WebPack ed in generale è la chiave di volta di tutto.
In riferimento a ReactJs esiste un loader che converte i file .jsx in .js, riscrivendo il contenuto del file.
Convenzioni sul nome di un loader
Per convenzione un loader ha il nome xxx-loader. Ad esempio css-loader oppure style-loader e via dicendo.
Installazione di un loader
Un loader, prima di essere utilizzato, va istallato. Si utilizza npm per istallare un loader. Ad esempio:
npm install css-loader --save-dev
Utilizzo di un loader
Ci sono diversi modi per utilizzare un loader, noi ci limitiamo all'utilizzo con file di configurazione webpack.config.js.
module.exports = {
entry: './main.js',
output: {
filename: 'bundle.js'
},
// Inizio sezione module
module: {
loaders: [
{ test: /\.css$/, loader: "css" }
]
}
// Fine sezione module
};
La nuova sezione module contiene un array loaders
che definisce:
- Quali loaders utilizzare (uno o più di uno)
- Su quali risorse utilizzarli
La riga interessante è questa:
{ test: /\.css$/, loader: "css" }
Analizziamo in modo sommario cosa fa questa riga.
test
definisce l'espressione regolare per identificare le risorse su cui applicare il loader css
.
Nello specifico, viene applicato il loader css a tutti i file con estensione .css
I loader possono essere concatenati.
{ test: /\.css$/, loader: "style!css" }
Questa riga esegue due differenti loader, uno in seguito all'altro. Il primo loader identificato è quello alla destra. L'ordine di esecuzione va da destra a sinistra.
Un ultimo esempio per "fermare nella mente" il concetto.
{ test: /\.css$/, loader: "style!css!less" }
Questa riga esegue tre loader, il primo loader less
compila i file .less, successivamente applica il loader css
ed in ultimo style
.
Questi loader, devono essere istallati prima di poter essere utilizzati con successo.
npm install less-loader --save-dev
npm install style-loader --save-dev
In OSX questi comandi vanno eseguiti con sudo
.