2015-07-16 8 views
14

Ich bin neu bei Webpack. Ich versuche Webpack aus zwei Gründen zu verwenden:Webpack: Wie optimiert man das generierte bundle.js? Es ist viel zu groß in meinem Fall

  • Component Management: kleinste Größe möglich, weniger Anfragen möglich an den Server: require(...)
  • Leistung verwenden.

Aber mit der Anwendung, die ich gerade erst begonnen (derzeit gibt es so etwas wie vier Komponenten reagieren nur), die bundle.js Datei von Webpack erzeugt 3.87MB ist !!!

Ich bin ziemlich sicher, dass Webpack Dinge bündelt, die ich nie brauchen werde. Ich würde gerne wissen, wie man die generierte Datei optimiert ... Wie kann ich den Webpack-Prozess "debuggen"?

Mein webpack.config.js:

var webpack = require("webpack"); 

module.exports = { 
    entry: "./app/bootstrap.js", 
    output: { 
     path: __dirname, 
     publicPath: "/public/", 
     filename: "bundle.js" 
    }, 
    module: { 
     loaders: [ 
      { 
       test: /\.css$/, 
       loader: "style!css" 
      }, 
      { 
       test: /\.js$/, 
       exclude: /(node_modules|bower_components)/, 
       loader: 'babel-loader' 
      }, 
      { 
       test: /\.js$/, 
       include: /vis/, 
       loader: 'babel-loader' 
      }, 
      { 
       test: /\.(png|woff|woff2|eot|ttf|svg|gif|jpg|jpeg|bmp)(\?.*$|$)/, 
       loader: 'url-loader?limit=100000' 
      } 
     ] 
    }, 
    plugins: [ 
     new webpack.ProvidePlugin({ 
      $: "jquery", 
      jQuery: "jquery", 
      "window.jQuery": "jquery" 
     }), 
     new webpack.optimize.UglifyJsPlugin({minimize: true}) 
    ] 

}; 

und package.json:

{ 
    "name": "XXXXX", 
    "version": "1.0.0", 
    "main": "", 
    "scripts": { 
    "dev": "webpack --progress --colors --watch --devtool eval", 
    "prod": "webpack --progress --colors" 
    }, 
    "author": "", 
    "license": "ISC", 
    "dependencies": { 
    "alt": "^0.16.10", 
    "bootstrap": "^3.3.5", 
    "es6-promise": "^2.3.0", 
    "i18next-client": "^1.10.2", 
    "jquery": "^1.10.2", 
    "react": "^0.13.3", 
    "react-router": "^0.13.3", 
    "toastr": "^2.1.0", 
    "vis": "^4.4.0" 
    }, 
    "devDependencies": { 
    "css-loader": "^0.15.1", 
    "babel-core": "^5.6.18", 
    "babel-loader": "^5.3.1", 
    "es6-module-loader": "^0.17.3", 
    "extract-text-webpack-plugin": "^0.8.2", 
    "file-loader": "^0.8.4", 
    "node-libs-browser": "^0.5.2", 
    "webpack": "^1.9.13", 
    "url-loader": "^0.5.6", 
    "style-loader": "^0.12.3", 
    "webpack-dev-server": "^1.9.0" 
    } 
} 

Jede Hilfe, wie die erzeugte bundle.js zu optimieren?

+0

Hallo, Vielen Dank für Ihre Fragen und Antworten. Ich habe das gleiche Problem. Hast du mehr Zeug entdeckt, das du teilen kannst? –

Antwort

11
+0

Bis zu 2,01 MB mit dieser Flagge, danke! Es ist immer noch groß. Ich werde untersuchen warum ... Ich denke, ich könnte ein Teil des Problems sein! ;-) – electrotype

+8

Für die Aufzeichnungen: was wirklich einen großen Unterschied gemacht hat, war das Entfernen des Flags "--devtool eval", so dass keine Quellkartendateien erzeugt werden. (Außerdem: gibt es ein fehlendes "c" in Ihrer "--prodution" -Flagge?) – electrotype

+0

Diese "--production" -Flagge hilft überhaupt bei meinem Projekt. Die Größe ging von 6,47 M auf 6,47 M. Ich habe meine Frage hier http://stackoverflow.com/questions/40093936/react-redux-bundle-js-is-too-big – lonelyloner

4

Fügen Sie diese in Ihrer Produktion config-Datei:

plugins: [ 
    new webpack.DefinePlugin({ 
     'process.env': { 
     // This has effect on the react lib size 
     'NODE_ENV': JSON.stringify('production'), 
     } 
    }), 
    new ExtractTextPlugin("bundle.css", {allChunks: false}), 
    new webpack.optimize.AggressiveMergingPlugin(), 
    new webpack.optimize.OccurrenceOrderPlugin(), 
    new webpack.optimize.DedupePlugin(), 
    new webpack.optimize.UglifyJsPlugin({ 
     mangle: true, 
     compress: { 
     warnings: false, // Suppress uglification warnings 
     pure_getters: true, 
     unsafe: true, 
     unsafe_comps: true, 
     screw_ie8: true 
     }, 
     output: { 
     comments: false, 
     }, 
     exclude: [/\.min\.js$/gi] // skip pre-minified libs 
    }), 
    new webpack.IgnorePlugin(/^\.\/locale$/, [/moment$/]), //https://stackoverflow.com/questions/25384360/how-to-prevent-moment-js-from-loading-locales-with-webpack 
    new CompressionPlugin({ 
     asset: "[path].gz[query]", 
     algorithm: "gzip", 
     test: /\.js$|\.css$|\.html$/, 
     threshold: 10240, 
     minRatio: 0 
    }) 
    ], 
+0

für Ignore Plugin mit Webpack 2 zu arbeiten verwenden Sie 'new webpack.IgnorePlugin (/^\. \/locale $ /,/moment $ /) ' – zatziky

Verwandte Themen