Webpack Example: Difference between revisions

From bibbleWiki
Jump to navigation Jump to search
No edit summary
Line 33: Line 33:
     "report": "webpack --config configs/webpack/webpack.config.js --env env=production --env=withReport",
     "report": "webpack --config configs/webpack/webpack.config.js --env env=production --env=withReport",
</syntaxhighlight>
</syntaxhighlight>
The report option runs the BundleAnalyzerPlugin which shows the breakdown of the bundle<br>
The report option runs the BundleAnalyzerPlugin which shows the breakdown of the bundle. This tells you what each bundle comprises of. More on that below<br>
[[File:Bundle_Analzer_2024-12-13_12-26-16.png]]<br>
[[File:Bundle_Analzer_2024-12-13_12-26-16.png|300px]]<br>
When the build is run, webpack will output the necessary you need to load in the html. <br>
[[File:Webpack output 2024-12-13 12-29-47.png | 500px]]<br>
This was a mistake I made when using webpack. These bundles '''must''' but in the index.html for it to work.<br>
<syntaxhighlight lang="html">
<!doctype html>
<html lang="en">
    <head>
...
        <script defer async src="runtime.js"></script>
        <script defer async src="vendor_react.js"></script>
        <script defer async src="common_app.js"></script>
        <script defer async src="app.js"></script>
    </head>
..
</syntaxhighlight>

Revision as of 23:33, 12 December 2024

Introduction

This page is about webpack which I guess is quite old. I wanted to capture what I learned when I used it.

Structure of the Code

For me I divided this up in the following way

webpack.config.js

This essentially handles the merge of the other files. I added to parameters for, which environment and whether to show the BundleAnalyzer report.

import { merge } from 'webpack-merge'

import { commonConfig } from './webpack.config.common.js'
import { devConfig } from './webpack.config.dev.js'
import { prodConfig } from './webpack.config.prod.js'

export default ({ env, withReport }) => {
  console.log(`Building for ${env} environment...`)
  switch (env) {
    case 'development':
      return merge(commonConfig(env, withReport), devConfig(process.env.SSL_KEY_FILE, process.env.SSL_CRT_FILE))
    case 'production':
      return merge(commonConfig(env, withReport), prodConfig)
    default:
      throw new Error('No matching configuration was found!')
  }
}

Running the build

So to do the build we launch this from npm. all pretty obvious

    "start": "webpack serve --config configs/webpack/webpack.config.js --env env=development",
    "dev": "webpack --config configs/webpack/webpack.config.js --env env=development",
    "build": "webpack --config configs/webpack/webpack.config.js --env env=production",
    "report": "webpack --config configs/webpack/webpack.config.js --env env=production --env=withReport",

The report option runs the BundleAnalyzerPlugin which shows the breakdown of the bundle. This tells you what each bundle comprises of. More on that below

When the build is run, webpack will output the necessary you need to load in the html.

This was a mistake I made when using webpack. These bundles must but in the index.html for it to work.

<!doctype html>
<html lang="en">
    <head>
...
        <script defer async src="runtime.js"></script>
        <script defer async src="vendor_react.js"></script>
        <script defer async src="common_app.js"></script>
        <script defer async src="app.js"></script>
    </head>
..