Babel

Babel può trasformare la sintassi JSX in sintassi JS, inoltre è in grado di convertire la sintassi ES6 Harmony in ES5 Vanilla.

Babel è utilizzato come loader nel workflow di WebPack. Da questo momento in poi Babel sostituisce React-tools in tutti gli esempi.

Babel in azione con WebPack

Creare una nuova cartella di progetto. Creare la cartella /src per i sorgenti e la cartella /dist per i file di produzione.

Istallare i seguenti pacchetti.

npm install webpack
npm install react
npm install babel

Inizializzare un file di progetto npm con il seguente comando

npm init

E' possibile rispondere alle domande con il valore di default premendo invio. Alla fine dell'operazione è presente un file package.json.


I file javascript utilizzano la nuova sintassi ES6 che Babel loader si preoccupa di convertire in ES5 per tutti i browser che non ne hanno il supporto.


Creare il file main.js all'interno di /src/app

import React from 'react';
import Hello from '../components/hello'; // relativo to main.js

main();

function main() {
    React.render(<Hello />, document.getElementById('app'));
}

Creare il file hello.js all'interno di /src/components

import React from 'react';

export default class Hello extends React.Component {
  // Classe ES6
  render() {
    return <h1>Hello world!</h1>;
  }
}

Creare il file index.html all'interno di /dist

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8"/>
  </head>
  <body>
    <div id="app"></div>

    <script src="bundle.js"></script>
  </body>
</html>

Creare un file webpack.config.js nella cartella di progetto e valorizzarlo.

// contenuto del file webpack.config.js
var path = require('path');

var config = {
  entry: path.resolve(__dirname, 'src/app/main.js'), // file principale per la risoluzione delle dipendenze
  output: {
    path: path.resolve(__dirname, 'dist'), // cartella destinazione
    filename: 'bundle.js' // nome file di destinazione
  },
  module: {
    loaders: [
      {test: /\.jsx?$/, loader: 'babel'} // I file con estensione js oppure jsx sono processati da babel-loader
    ]
  },
  resolve: {
    extensions: ['', '.js', '.jsx'] // di default i file .jsx non sono risolti da webpack, per questo motivo ho specificato l'estensione .jsx
  }
};

module.exports = config;

Lanciare WebPack con il comando webpack. All'interno della cartella /dist viene creato un file bundle.js che è il nostro static asset creato da WebPack.

Il file index.html può essere visualizzato con un browser.