Een introductie voor beginners tot Webpack

Wat is Webpack?

Webpack is een tool waarmee u JavaScript-modules kunt compileren. Het is ook bekend als een modulebundler.

Gegeven een groot aantal bestanden, genereert het een enkel bestand (of een paar bestanden) die uw app uitvoeren.

Het kan veel bewerkingen uitvoeren:

  • helpt u uw bronnen te bundelen.
  • let op wijzigingen en voert de taken opnieuw uit.
  • kan Babel-transpilatie uitvoeren naar ES5, zodat u de nieuwste JavaScript-functies kunt gebruiken zonder dat u zich zorgen hoeft te maken over browserondersteuning.
  • kan CoffeeScript transpileren naar JavaScript
  • kan inline afbeeldingen converteren naar data-URI's.
  • kunt u vereisen () gebruiken voor CSS-bestanden.
  • kan een ontwikkelingswebserver runnen.
  • kan hete module vervangen.
  • kan de uitvoerbestanden in meerdere bestanden splitsen om te voorkomen dat een enorm JS-bestand moet worden geladen bij de eerste pagina-hit.
  • kan het schudden van bomen uitvoeren.

Webpack is niet beperkt tot gebruik op de front-end, maar is ook nuttig bij de ontwikkeling van backend Node.js.

Er zijn veel voorgangers van Webpack en veel overeenkomsten in wat die tools en Webpack doen. Het belangrijkste verschil is dat deze tools taakrunners worden genoemd, terwijl Webpack werd geboren als modulebundler.

Webpack is een meer gerichte tool. U hoeft alleen een ingangspunt voor uw app op te geven (het kan zelfs een HTML-bestand met scripttags zijn) en Webpack analyseert de bestanden en bundelt ze in één JavaScript-uitvoerbestand dat alles bevat wat u nodig hebt om de app te starten.

Webpack installeren

Webpack kan wereldwijd of lokaal voor elk project worden geïnstalleerd.

Wereldwijde installatie

Zo installeert u het wereldwijd met Garen:

wereldwijd garen toevoegen webpack webpack-cli

met npm:

npm i -g webpack webpack-cli

zodra dit is gebeurd, zou je moeten kunnen rennen

webpack-cli

Lokale installatie

Webpack kan ook lokaal worden geïnstalleerd. Het is de aanbevolen installatie, omdat Webpack per project kan worden bijgewerkt en u minder weerstand hebt bij het gebruik van de nieuwste functies voor slechts een klein project in plaats van alle projecten bij te werken die Webpack gebruiken.

Met garen:

garen toevoegen webpack webpack-cli -D

met npm:

npm i webpack webpack-cli --save-dev

Zodra dit is gebeurd, voegt u dit toe aan uw bestand package.json:

{
  // ...
  "scripts": {
    "build": "webpack"
  }
}

Zodra dit is gebeurd, kunt u Webpack uitvoeren door te typen

garen te bouwen

in de project root.

Webpack configuratie

Standaard vereist Webpack (vanaf versie 4) geen configuratie als u deze conventies respecteert:

  • het toegangspunt van uw app is ./src/index.js
  • de uitvoer wordt in ./dist/main.js gezet.
  • Webpack werkt in productiemodus

U kunt natuurlijk elk klein beetje Webpack aanpassen wanneer u dat nodig hebt. De Webpack-configuratie wordt opgeslagen in het bestand webpack.config.js, in de hoofdmap van het project.

Het beginpunt

Standaard is het toegangspunt ./src/index.js Dit eenvoudige voorbeeld gebruikt het ./index.js bestand als startpunt:

module.exports = {
  /*...*/
  entry: './index.js'
  /*...*/
}

Het resultaat

Standaard wordt de uitvoer gegenereerd in ./dist/main.js. In dit voorbeeld wordt de outputbundel in app.js geplaatst:

module.exports = {
  /*...*/
  output: {
    path: path.resolve (__ dirname, 'dist'),
    bestandsnaam: 'app.js'
  }
  /*...*/
}

Met Webpack kunt u import gebruiken of instructies in uw JavaScript-code gebruiken, niet alleen om andere JavaScript op te nemen, maar om het even welk bestand (bijvoorbeeld CSS).

Webpack streeft ernaar om al onze afhankelijkheden af ​​te handelen, niet alleen JavaScript, en laders zijn een manier om dat te doen.

In uw code kunt u bijvoorbeeld gebruiken:

'style.css' importeren

met behulp van deze laderconfiguratie:

module.exports = {
  /*...*/
  module: {
    reglement: [
      {test: /\.css$/, gebruik: 'css-loader'},
    }]
  }
  /*...*/
}

De reguliere expressie is gericht op elk CSS-bestand.

Een lader kan opties hebben:

module.exports = {
  /*...*/
  module: {
    reglement: [
      {
        test: /\.css$/,
        gebruik: [
          {
            loader: 'css-loader',
            opties: {
              modules: waar
            }
          }
        ]
      }
    ]
  }
  /*...*/
}

U kunt voor elke regel meerdere laders nodig hebben:

module.exports = {
  /*...*/
  module: {
    reglement: [
      {
        test: /\.css$/,
        gebruik:
          [
            'Style-loader',
            'Css-loader',
          ]
      }
    ]
  }
  /*...*/
}

In dit voorbeeld interpreteert css-loader de importrichtlijn 'style.css' in de CSS. style-loader is dan verantwoordelijk voor het injecteren van die CSS in de DOM, met behulp van een