BabelJS - Lavorare con Babel e Webpack

Webpack è un bundler di moduli che racchiude tutti i moduli con dipendenze - js, stili, immagini, ecc. In risorse statiche .js, .css, .jpg, .png, ecc. Webpack viene fornito con preimpostazioni che aiutano per la compilazione nel modulo richiesto. Ad esempio, il preset di reazione che aiuta a ottenere l'output finale in forma di reazione, es2015 o il preset di env che aiuta a compilare il codice in ES5 o 6 o 7, ecc. Abbiamo usato babel 6 nella configurazione del progetto. Se vuoi passare a babel7, installa i pacchetti richiesti di babel usando @ babel / babel-nome-pacchetto.

Qui, discuteremo la configurazione del progetto usando babel e webpack. Crea una cartella chiamata e apri la stessa in Visual Studio IDE.

Per creare la configurazione del progetto, eseguire npm initbabelwebpack come segue:

Ecco il package.json creato dopo npm init -

Adesso installeremo i pacchetti necessari per lavorare con babel e webpack.

npm install --save-dev webpack
npm install --save-dev webpack-dev-server
npm install --save-dev babel-core
npm install --save-dev babel-loader
npm install --save-dev babel-preset-env

Ecco il Package.json dopo l'installazione -

Ora creeremo un file webpack.config.js, che avrà tutti i dettagli per raggruppare i file js. Questi file verranno compilati in es5 usando babel.

Per eseguire webpack utilizzando il server, utilizziamo webpack-server. Di seguito sono riportati i dettagli aggiunti ad esso:

Abbiamo aggiunto il comando publish che avvierà il webpack-dev-server e aggiornerà il percorso in cui sono archiviati i file finali. In questo momento il percorso che useremo per aggiornare i file finali è la cartella / dev.

Per utilizzare webpack, dobbiamo eseguire il seguente comando:

npm run publish

Per prima cosa dobbiamo creare i file webpack.config.js. Questi avranno i dettagli di configurazione per il funzionamento del webpack.

I dettagli nel file sono i seguenti:

var path = require('path');

module.exports = {
   entry: {
      app: './src/main.js'
   },
   output: {
      path: path.resolve(__dirname, 'dev'),
      filename: 'main_bundle.js'
   },
   mode:'development',
   module: {
      rules: [
         {
            test: /\.js$/,
            include: path.resolve(__dirname, 'src'),
            loader: 'babel-loader',
            query: {
               presets: ['env']
            }
         }
      ]
   }
};

La struttura del file è come mostrato sopra. Inizia con il percorso h, che fornisce i dettagli del percorso corrente.

var path = require('path'); //gives the current path

Il prossimo è l'oggetto module.exports, che ha proprietà entry, output e module. L'ingresso è il punto di partenza. Qui, dobbiamo fornire i file js principali che devono essere compilati.

entry: {
   app: './src/main.js'
},

path.resolve(_dirname, ‘src/main.js’) - cercherà la cartella src nella directory e main.js in quella cartella.

Produzione

output: {
   path: path.resolve(__dirname, 'dev'),
   filename: 'main_bundle.js'
},

L'output è un oggetto con dettagli su percorso e nome file. Path conterrà la cartella in cui verrà conservato il file compilato e filename indicherà il nome del file finale da utilizzare nel file .html.

modulo

module: {
   rules: [
      {
         test: /\.js$/,
         include: path.resolve(__dirname, 'src'),
         loader: 'babel-loader',
         query: {
            presets: ['env']
         }
      }
   ]
}
  • Il modulo è un oggetto con i dettagli delle regole. Ha le seguenti proprietà:

    • test
    • include
    • loader
    • query
  • Il test conterrà i dettagli di tutti i file js che terminano con .js. Ha il pattern, che cercherà .js alla fine nel punto di ingresso fornito.

  • Include indica la cartella in uso sui file da esaminare.

  • Loader utilizza babel-loader per la compilazione dei codici.

  • La query ha preimpostazioni di proprietà, che è un array con valore env - es5 o es6 o es7.

Crea la cartella src e main.js al suo interno; scrivi il tuo codice js in ES6. Successivamente, esegui il comando per vederlo compilato su es5 usando webpack e babel.

src/main.js

let add = (a,b) => {
   return a+b;
};
let c = add(10, 20);
console.log(c);

Esegui il comando -

npm run pack

Il file compilato ha il seguente aspetto:

dev/main_bundle.js

!function(e) {
   var t = {};
   function r(n) {
      if(t[n])return t[n].exports;var o = t[n] = {i:n,l:!1,exports:{}};
      return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports
   }
   r.m = e,r.c = t,r.d = function(e,t,n) {
      r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})
   },
   r.r = function(e) {
      "undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})
   },
   r.t = function(e,t) {
      if(1&t&&(e = r(e)),8&t)return e;
      if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;
      var n = Object.create(null);
      if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t) {return e[t]}.bind(null,o));
      return n
   },
   r.n = function(e) {
      var t = e&&e.__esModule?function() {return e.default}:function() {return e};
      return r.d(t,"a",t),t
   },
   r.o = function(e,t) {return Object.prototype.hasOwnProperty.call(e,t)},
   r.p = "",r(r.s = 0)
}([function(e,t,r) {"use strict";var n = function(e,t) {return e+t}(10,20);console.log(n)}]);
!function(e) {
   var t = {};
   function r(n) {
      if(t[n])return t[n].exports;
      var o = t[n] = {i:n,l:!1,exports:{}};
      return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports
   }
   r.m = e,r.c = t,r.d = function(e,t,n) {
      r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})
   },
   r.r = function(e) {
      "undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})
   },
   r.t = function(e,t) {
      if(1&t&&(e=r(e)),
      8&t)return e;
      if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;
      var n = Object.create(null);
      if(
         r.r(n),
         Object.defineProperty(n,"default",{enumerable:!0,value:e}),
         2&t&&"string"!=typeof e
      )
      for(var o in e)r.d(n,o,function(t) {return e[t]}.bind(null,o));
      return n
   },
   r.n = function(e) {
      var t = e&&e.__esModule?function() {return e.default}:function() {return e};
      return r.d(t,"a",t),t
   },
   r.o = function(e,t) {
      return Object.prototype.hasOwnProperty.call(e,t)
   },
   r.p = "",r(r.s = 0)
}([function(e,t,r) {
   "use strict";
   var n = function(e,t) {return e+t}(10,20);
   console.log(n)
}]);

Il codice viene compilato come mostrato sopra. Webpack aggiunge del codice che è richiesto internamente e il codice da main.js viene visualizzato alla fine. Abbiamo consolato il valore come mostrato sopra.

Aggiungi il file js finale nel file .html come segue:

<html>
   <head></head>
   <body>
      <script type="text/javascript" src="dev/main_bundle.js"></script>
   </body>
</html>

Esegui il comando -

npm run publish

Per controllare l'output, possiamo aprire il file in -

http://localhost:8080/

Otteniamo il valore della console come mostrato sopra. Ora proviamo a compilare in un singolo file usando webpack e babel.

Useremo webpack per raggruppare più file js in un unico file. Babel verrà utilizzato per compilare il codice es6 in es5.

Ora abbiamo 2 file js nella cartella src / - main.js e Person.js come segue -

person.js

export class Person {
   constructor(fname, lname, age, address) {
      this.fname = fname;
      this.lname = lname;
      this.age = age;
      this.address = address;
   }

   get fullname() {
      return this.fname +"-"+this.lname;
   }
}

Abbiamo utilizzato export per utilizzare i dettagli della classe Person.

main.js

import {Person} from './person'
var a = new Person("Siya", "Kapoor", "15", "Mumbai");
var persondet = a.fullname;
console.log(persondet);

In main.js, abbiamo importato Person dal percorso del file.

Note- Non è necessario includere person.js ma solo il nome del file. Abbiamo creato un oggetto della classe Persona e consolato i dettagli come mostrato sopra.

Webpack si combinerà person.js e main.js e aggiorna in dev/main_bundle.jscome un file. Esegui il comandonpm run publish per controllare l'output nel browser -