Webpack 4 “taille dépasse la limite recommandée (244 Kio)”
J'ai deux fichiers qui sont combinés à moins de 600 octets (.6kb) comme ci-dessous.
Alors, comment est-ce que mon app.bundle.js est si grande (987kb) et plus important encore, comment peut-on gérer la taille de celui-ci?
src fichier index.js
import _ from 'lodash';
import printMe from './print.js';
function component() {
var element = document.createElement('div');
var btn = document.createElement('button');
//Lodash, now imported by this script
element.innerHTML = _.join(['Hello', 'webpack'], ' ');
btn.innerHTML = 'click and check console';
btn.onclick = printMe;
element.appendChild(btn);
return element;
}
document.body.appendChild(component());
src fichier print.js
export default function printMe() {
consoe.log('Called from print.js');
}
webpack.config.js
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const CleanWebpackPlugin = require('clean-webpack-plugin');
module.exports = {
entry: {
app: './src/index.js',
print:'./src/print.js'
},
devtool: 'inline-source-map',
plugins: [
new CleanWebpackPlugin(['dist']),
new HtmlWebpackPlugin({
title: 'Output Management'
})
],
output: {
filename: '[name].bundle.js',
path: path.resolve(__dirname, 'dist')
}
};
paquet.json
{
"name": "my-webpack-4-proj",
"version": "1.0.0",
"description": "",
"main": "index.js",
"mode": "development",
"scripts": {
"dev": "webpack --mode development",
"build": "webpack --mode production",
"watch": "webpack --watch",
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"clean-webpack-plugin": "^0.1.19",
"css-loader": "^0.28.11",
"csv-loader": "^2.1.1",
"file-loader": "^1.1.11",
"html-webpack-plugin": "^3.0.6",
"style-loader": "^0.20.3",
"webpack": "^4.1.1",
"webpack-cli": "^2.0.12",
"xml-loader": "^1.2.1"
},
"dependencies": {
"express": "^4.16.3",
"lowdash": "^1.2.0"
}
}
Message d'avertissement:
D'AVERTISSEMENT actifs, dans la limite de taille: La suite de l'actif(s) ne peut dépasser le
recommandé limite de taille (244 Kio). Cela peut avoir un impact sur la performance web.
Actifs: app.bundle.js (964 Kio)
- Le
print.js
de la bibliothèque a été renommé il y a un moment pourprint-js
. Vous devriez changer cela dans votre projet pour obtenir les versions les plus récentes de la lib. - Je laisse un commentaire mais je n'ai pas assez de réputation encore. Je tenais à préciser que Riyadh suggestion de faire ` de la performance: { conseils: false, maxEntrypointSize: 512000, maxAssetSize: 512000 } `` Ne résout pas le problème sous-jacent, il vient de se désactive l'avertissement que vous voyez. Si un novice webpack utilisateurs d'y trouver une solution et de voir qu'il efface les avertissements. Juste de savoir que vous n'êtes pas réellement de compensation de l'avertissement, juste en le désactivant.
Vous devez vous connecter pour publier un commentaire.
Cela se produit parce que webpack est le regroupement de tous vos code dépendances. Et comme vous êtes à l'aide de lodash, donc lodash version minifiée sera ajouté à votre code source. De Plus, vous êtes, y compris la source des cartes:
Alors que ce devrait être bon pour le débogage, il n'y a aucune raison d'inclure votre carte source dans une Prod de construire. Donc certaines choses que vous pouvez faire pour réduire votre faisceau de taille.
Parfois même ces choses ne seront pas apporter votre bundle taille au-dessous 244kb, ce que vous pouvez faire dans ces cas est de diviser votre faisceau et de commencer à utiliser des morceaux logiques.
Tout d'abord, vous pouvez facilement séparer vos js à partir de votre styesheets en utilisant l'extrait de texte plugin.
Une autre technique que vous pouvez utiliser sont dynamiques des importations.
Cela vous permettra de casser votre code logiquement dans les modules liés aux écrans de sorte que seules les bibliothèques requises seront chargés. Pour plus d'infos sur la dynamique des importations, vous pouvez consulter la documentation officielle.
https://webpack.js.org/guides/code-splitting/
require
(ouimport
) énoncés dans le code, et assurez-vous que tout ce que vousrequire
est inclus dans votre forfait. Puisque vousimport _ from 'lodash'
il comprend lodash. Une chose que vous pouvez faire est de ne pas importer l'ensemble de lodash, mais seuls les bits que vous utilisez réellement. lodash est structurée d'une manière qui facilite ce.import join from 'lodash/join'
devrait également faire une différence significative.J'ai eu le même problème. Mon fichier de regroupement a été (1.15 Mo).
Dans mon webpack.config.js, en remplacement de :
par cette ligne:
prend mon fichier de paquet taille de 1.15 MiB à 275 Kio.
Ou de créer de séparer les 2 webpack fichiers de configuration. Un pour les dev et un pour la prod. Dans la prod webpack fichier de configuration, supprimer la
devtool
option.Simplement utiliser code ci-dessous dans webpack.config.js :
ou suivre
Vous pouvez créer plusieurs fichier de config pour le développement, la production). Le dev fichier de configuration utiliser l'outil développeur d'internet explorer ou autres nécessaires dev configuration et vice versa .
vous devez utiliser webpack-package de la fusion et de package de configuration.json scripts de code comme
Par exemple :
créer un fichier webpack.common.js
Créer webpack.dev.js
Créer webpack.prod.js
mode de réglage de l'indicateur de développement et de production dans webpack.config.js. Exemple-