Warum ist mein webpack bundle.js und vendor.bundle.js so unglaublich groß ist?
Alle meine Projekte Reagieren neigen dazu, unglaublich groß in der Dateigröße (bundle.js ist 4.87 mb vendor.bundle.js ist 2,87 mb). Ich habe keine Ahnung, warum es diese große. Ich habe bereits uglifyJS auf, aber das scheint nicht zu helfen, eine Menge (5.09 > 4.87 mb und 2,9 > 2.87 mb)
var webpack = require('webpack');
var ExtractTextPlugin = require("extract-text-webpack-plugin");
require('es6-promise').polyfill();
var config = {
entry: {
app: [
'./src/entry.jsx'
],
vendor: [
'react',
'lodash',
'superagent'
]
},
output: {
path: './build',
filename: "bundle.js"
},
eslint: {
configFile: './.eslintrc'
},
devtool: 'eval-source-map',
module: {
loaders: [
{ test: /\.(js|jsx)$/, loaders: ['react-hot', 'babel?experimental'], exclude: /node_modules/},
{ test: /\.(js|jsx)$/, loader: "eslint-loader", exclude: /node_modules/},
{ test: /\.json$/, loader: 'json' },
{ test: /\.yml$/, loader: 'json!yaml' },
{ test: /\.scss$/, loader: 'style!css!sass' },
{ test: /\.(png|woff|woff2|eot|ttf|svg)$/, loader: 'url-loader?limit=100000' }
]
},
plugins: [
new webpack.DefinePlugin({'process.env': {'NODE_ENV': JSON.stringify('production')}}),
new webpack.optimize.CommonsChunkPlugin("vendor", "vendor.bundle.js"),
new webpack.optimize.UglifyJsPlugin({minimize: true}),
new webpack.NoErrorsPlugin()
]
};
module.exports = config;
Mein Paket.json
{
"license": "MIT",
"engines": {
"iojs": ">= 1.6.2"
},
"scripts": {
"create:index": "mustang -t index.tmpl -i config.json -o build/index.html",
"predev": "mkdir -p build/&& npm run create:index",
"dev": "webpack-dev-server --host 0.0.0.0 --hot --progress --colors --content-base build",
"backend": "NODE_ENV=production node server/server.js",
"backend:dev": "DEBUG=tinderlicht node server/server.js",
"predeploy": "mkdir -p build/&& npm run create:index",
"deploy": "NODE_ENV=production webpack -p",
"test": "node webpack-mocha.config.js"
},
"devDependencies": {
"autoprefixer-loader": "^3.2.0",
"axios": "^0.7.0",
"babel": "^5.8.23",
"babel-core": "^5.8.25",
"babel-eslint": "^4.1.3",
"babel-loader": "^5.3.2",
"bluebird": "^2.10.2",
"css-loader": "^0.19.0",
"es6-collections": "^0.5.1",
"es6-promise": "^3.0.2",
"eslint": "^1.6.0",
"eslint-loader": "^1.1.0",
"eslint-plugin-react": "^3.5.1",
"extract-text-webpack-plugin": "^0.8.2",
"file-loader": "^0.8.1",
"firebase": "^2.3.1",
"fireproof": "^3.0.3",
"jquery": "^2.2.0",
"json-loader": "^0.5.1",
"jsonld": "^0.4.2",
"jsx-loader": "^0.13.2",
"lodash": "^3.3.0",
"mustang": "^0.1.3",
"node-sass": "^3.3.3",
"react": "^0.14.0",
"react-dom": "^0.14.0",
"react-hot-loader": "^1.1.5",
"sass-loader": "3.0.0",
"style-loader": "^0.12.4",
"superagent": "^1.4.0",
"url-loader": "^0.5.5",
"webpack": "^1.5.3",
"webpack-dev-server": "^1.7.0"
},
"dependencies": {
"body-parser": "^1.15.0",
"cors": "^2.7.1",
"debug": "^2.2.0",
"express": "^4.13.4",
"mustache": "^2.2.1",
"nodemailer": "^2.1.0",
"nodemailer-sendmail-transport": "^1.0.0",
"react-radio-group": "^2.2.0",
"uglifyjs": "^2.4.10"
}
}
Hat jemand eine Idee, wie man dieses Problem beheben?
- David Guan Beratung klingt gut. Sie sind mit
devtool: "eval-source-map"
bietet eine gute Entwickler-Erfahrung, aber es enthält den gesamten Quellcode als data-url. Sie sollten nicht in die Produktion.
Du musst angemeldet sein, um einen Kommentar abzugeben.
BEARBEITEN
Ich bin nicht sicher, wenn Sie auf Mac/IOs oder Windows, aber 2 Dinge habe ich bemerkt:
1:
"deploy": "NODE_ENV=production webpack -p"
nicht seens korrekt ist, müssen Sie die variable, wenn Sie 're building it für die Entwicklung und für die Bereitstellung und werden Sie hier nicht einstellen.2: Sie müssen zuvor legen Sie es auf dem terminal/comand prompt.
Geht hier ein Beispiel für webpack verkleinern und bereitstellen, Sie müssen sich ein bisschen, aber ich hp das sollte dir helfen.
Müssen Sie zuerst diese enviroment Variablen für Knoten auf comand prompt, öffnen Sie Sie in windows oder terminal in mac und:
Können Sie echo in windows oder Liste im mac zu überprüfen, wenn die variable wurde Hinzugefügt.
Dann in Ihre webpack.config.js
In Ihrem Paket.json-Sie können diese Skripts:
Wenn Sie auf Windows:
Wenn Sie auf Mac IOS:
Wenn der export funktioniert hier nicht verwenden, statt, der Unterschied von windows und mac ist das Leerzeichen nach &&.
Den Einsatz der comand npm-run Uhr zu bauen, die in der Entwicklung und npm führen Sie die Bereitstellung, um es zu bauen für die Produktion in einer minified version.
NODE_ENV=production webpack -p
hat in der Tat setzen Sie die Umgebungsvariable.Ich würde empfehlen, mit Webpack Bundle-Analysator, um Ihre bundle-kleiner (https://github.com/th0r/webpack-bundle-analyzer). Sie können sehen, was Ihr Bündel so groß ist. Sie könnten auch alle von FB, lodash, und jquery. Neben der Verwendung von webpack Produktion plugins, versuchen Sie es mit ignorieren, was auch immer Sie Sie nicht verwenden und importieren nur das, was Sie brauchen, etwa so:
In der webpack-plugins:
In Ihre Importe:
Für lodash, importieren nur das, was Sie benötigen, oder machen Sie eine benutzerdefinierte build (https://lodash.com/custom-builds):
Können Sie auch erstellen, jquery custom builds als gut.
Habe ich ein repo-setup mit nur Reagieren /Reagieren Dom und ein Hello Word Reagieren Komponente. Die vendor.js Datei 189 KB.
https://github.com/timarney/react-setup
Hinweis: ich werde die KNOTEN ENV über einen NPM-Skript
Können Sie versuchen, hinzufügen dieser
devtool: 'cheap-module-source-map',
in
config
?http://webpack.github.io/docs/configuration.html#devtool
Reagieren erwartet Sie zu setzen
NODE_ENV
zu'production'
für die Produktion baut, und führen Sie es durch Verunstalten -- dieser entledigt sich eine Menge zusätzlicher Ausführlichkeit, console logging, etc. Stellen Sie sicher, dass Sie, dass die Umgebungsvariable, wenn Gebäude über webpack (z.B.NODE_ENV=production webpack
auf der Kommandozeile).