Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I disable chunk(code splitting) with webpack4?

I created react project with : yarn create react-app. I'm using webpack 4.29.6, react 16.8.6.

I want to disable code splitting because I want just one 'main.js' file in build/static/js folder. (I already removed hash from their names.)

I tried:

new webpack.optimize.LimitChunkCountPlugin({
    maxChunks: 1
  }),

and

      splitChunks: {
        chunks: 'all',
        name: false,
        cacheGroups: {
          default:false
        }
      }

but these solutions give me these files:

build
  /static
   /js
   -2.chunk.js
   -2.chunk.js.map
   -main.chunk.js
   -main.chunk.js.map
   -runtime~main.js
   -runtime~main.js.map

I think runtime~main.js file and .map file are just okay, but I want the exact 'main.js' file without chunk, without 2.chunk.js. How can I disable default code splitting of webpack 4?

like image 915
심시은 Avatar asked May 05 '19 16:05

심시은


People also ask

What is split chunk?

splitChunks.If the current chunk contains modules already split out from the main bundle, it will be reused instead of a new one being generated. This can affect the resulting file name of the chunk. webpack.config.js module.

Can webpack split code into separate files?

Code splitting is one of the most compelling features of webpack. This feature allows you to split your code into various bundles which can then be loaded on demand or in parallel.

What is code splitting?

Code splitting is the splitting of code into various bundles or components which can then be loaded on demand or in parallel. As an application grows in complexity or is maintained, CSS and JavaScripts files or bundles grow in byte size, especially as the number and size of included third-party libraries increases.

How does chunking work webpack?

Webpack injects some code into main. js which takes care of lazy loading async chunks and stops from loading same chunks again and again. When a route changes, React router calls a Webpack function to load a chunk file and Webpack after done loading runs it, which chunk then would internally ask React to do something.


2 Answers

plugins: [
    new webpack.optimize.LimitChunkCountPlugin({
        maxChunks: 1
    })
]

Try if this works. Install this manually LimitChunkCountPlugin

https://webpack.js.org/plugins/limit-chunk-count-plugin/

like image 104
satheesh m Avatar answered Sep 18 '22 14:09

satheesh m


If you created your project with create-react-app and haven't yet ejected, it appears you have two options currently available:

Option 1 - Create a custom build script

First, install the package rewire as a dependency:

npm install rewire

Create a scripts folder, inside create a new file and give it a name e.g., build-non-split.js, then add:

const rewire = require('rewire');
const defaults = rewire('react-scripts/scripts/build.js');
let config = defaults.__get__('config');

config.optimization.splitChunks = {
    cacheGroups: {
        default: false,
    },
};

config.optimization.runtimeChunk = false;

Modify package.json, inside "scripts" and replace build with:

"build": "node ./scripts/build-non-split.js",

Finally, run npm run build or yarn build

Option 2 - Install the package react-app-rewire-disable-chunks

Note: If you go with this option, don't forget to replace the build script with react-app-rewired. Like this:

"build": "react-app-rewired build",

Source: Disabling code splitting in CRA2 #5306

like image 41
Juan Marco Avatar answered Sep 20 '22 14:09

Juan Marco