En begynder introduktion til Webpack

Hvad er Webpack?

Webpack er et værktøj, der giver dig mulighed for at komponere JavaScript-moduler. Det er også kendt som en modulbundter.

I betragtning af et stort antal filer genererer det en enkelt fil (eller et par filer), der kører din app.

Det kan udføre mange operationer:

  • hjælper dig med at samle dine ressourcer.
  • ser for ændringer og kører opgaverne igen.
  • kan køre Babel-transpilering til ES5, så du kan bruge de nyeste JavaScript-funktioner uden at bekymre dig om browserstøtte.
  • kan transponere CoffeeScript til JavaScript
  • kan konvertere inline-billeder til data-URI'er.
  • giver dig mulighed for at bruge kræve () til CSS-filer.
  • kan køre en udviklingswebserver.
  • kan håndtere udskiftning af varmt modul.
  • kan opdele outputfilerne i flere filer for at undgå at have en enorm JS-fil, der skal indlæses i den første sides hit.
  • kan udføre træ ryster.

Webpack er ikke begrænset til at blive brugt i front-end, men er også nyttigt i udviklingen af ​​backend Node.js.

Der er mange forgængere af Webpack og mange ligheder i, hvad disse værktøjer og Webpack gør. Den største forskel er, at disse værktøjer er kendt som opgaveløbere, mens Webpack blev født som en modulbundter.

Webpack er et mere fokuseret værktøj. Du skal bare specificere et indgangspunkt til din app (det kan endda være en HTML-fil med script-tags) og webpack analyserer filerne og bundter dem i en enkelt JavaScript-outputfil, der indeholder alt hvad du har brug for for at køre appen.

Installation af Webpack

Webpack kan installeres globalt eller lokalt til hvert projekt.

Global installation

Sådan installeres det globalt med Garn:

garn global tilføj webpack webpack-cli

med npm:

npm i -g webpack webpack-cli

når dette er gjort, skal du være i stand til at køre

webpack-cli

Lokal installation

Webpack kan også installeres lokalt. Det er den anbefalede opsætning, fordi Webpack kan opdateres pr. Projekt, og du har mindre modstand i at bruge de nyeste funktioner bare til et lille projekt snarere end at opdatere alle de projekter, du har, der bruger Webpack.

Med garn:

garn tilføj webpack webpack-cli -D

med npm:

npm i webpack webpack-cli - save-dev

Når dette er gjort, tilføj dette til din package.json-fil:

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

Når dette er gjort, kan du køre Webpack ved at skrive

garn bygger

i projektets rod.

Webpack-konfiguration

Som standard kræver Webpack (startende fra version 4) ingen konfiguration, hvis du overholder disse konventioner:

  • indgangspunktet for din app er ./src/index.js
  • output sættes i ./dist/main.js.
  • Webpack fungerer i produktionsfunktion

Du kan selvfølgelig tilpasse hver lille smule af Webpack, når du har brug for det. Webpack-konfigurationen gemmes i filen webpack.config.js i projektets rodmappe.

Indgangspunktet

Som standard er indgangspunktet ./src/index.js Dette enkle eksempel bruger filen ./index.js som udgangspunkt:

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

Output

Som standard genereres output i ./dist/main.js. Dette eksempel sætter output-bundtet i app.js:

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

Brug af Webpack giver dig mulighed for at bruge import eller kræve udsagn i din JavaScript-kode ikke kun for at inkludere anden JavaScript, men enhver form for fil (for eksempel CSS).

Webpack sigter mod at håndtere alle vores afhængigheder, ikke kun JavaScript, og læsere er en måde at gøre det på.

I din kode kan du f.eks. Bruge:

import 'style.css'

ved at bruge denne loader-konfiguration:

module.exports = {
  /*...*/
  modul: {
    regler: [
      {test: /\.css$/, use: 'css-loader'},
    }]
  }
  /*...*/
}

Det regulære udtryk er målrettet mod enhver CSS-fil.

En loader kan have indstillinger:

module.exports = {
  /*...*/
  modul: {
    regler: [
      {
        test: /\.css$/,
        brug: [
          {
            loader: 'css-loader',
            muligheder: {
              moduler: sandt
            }
          }
        ]
      }
    ]
  }
  /*...*/
}

Du kan kræve flere indlæsere for hver regel:

module.exports = {
  /*...*/
  modul: {
    regler: [
      {
        test: /\.css$/,
        brug:
          [
            'Stil-loader',
            'CSS-loader',
          ]
      }
    ]
  }
  /*...*/
}

I dette eksempel fortolker css-loader import 'style.css' -direktivet i CSS. style-loader er derefter ansvarlig for at injicere denne CSS i DOM ved hjælp af et