2016-11-07 5 views
2

ウェブパックバンドルのサイズが大きいため、問題に直面しています。Webpack largeバンドルサイズ

マイ・バンドル・サイズのサイズは、約166 kbです。私はwebpackを-pフラグで実行しています。サイズの大部分は、バンドルファイル内の反応モジュールをバンドルすることによるものです。だから私がやろうとしているのは、私のアプリケーション固有のコードを含むバンドルと、頻繁に変更されないnpmのミニバージョンを含むバンドルの2つのバンドルを作っているということです。

私のバンドルのサイズは20 Kbになりました。だから、私は私のpackage.jsonファイル

{ 
    "name": "Sample App", 
    "version": "0.0.1", 
    "private": true, 
    "scripts": { 
    "webpack-server": "webpack-dev-server --hot --progress --colors --port 3000", 
    "serve-web": "npm run webpack-server", 
    "deploy": "NODE_ENV=production webpack -p --optimize-minimize" 
    }, 
    "dependencies": { 
    "babel-core": "6.9.0", 
    "babel-loader": "6.2.4", 
    "babel-plugin-transform-runtime": "6.9.0", 
    "babel-preset-es2015": "6.9.0", 
    "babel-preset-react": "6.5.0", 
    "babel-preset-stage-0": "6.5.0", 
    "babel-relay-plugin": "^0.9.1", 
    "babel-runtime": "6.9.0", 
    "css-loader": "^0.23.0", 
    "file-loader": "^0.8.5", 
    "http-server": "^0.8.0", 
    "img-loader": "^1.3.1", 
    "node-fetch": "^1.5.3", 
    "postcss-loader": "^0.8.0", 
    "react": "15.3.2", 
    "react-dom": "^15.1.0", 
    "react-hot-loader": "^1.2.8", 
    "react-redux": "^4.4.5", 
    "redux": "^3.6.0", 
    "source-map-loader": "^0.1.5", 
    "url-loader": "^0.5.7", 
    "webpack": "1.13.1", 
    "webpack-dev-server": "1.14.1" 
    }, 
    "jest": { 
    "preset": "jest-react-native" 
    }, 
    "devDependencies": { 
    "babel-cli": "6.9.0", 
    "babel-core": "^6.9.0", 
    "babel-loader": "^6.2.4" 
    }, 
    "engines": { 
    "npm": ">=3" 
    } 
} 

import {connect, Provider} from 'react-redux'; 
import React from "react" 
import {createStore, combineReducers} from 'redux'; 
import reducers from "./reducers"; 
import {increment} from "./actions/App.js"; 
var store = createStore(
    combineReducers({ 
     ...reducers 
    }) 
); 

class App extends React.Component { 
    render() { 
     return <div> 
      <span>Value is : {this.props.value}</span> 

      <div onClick={this.props.increment}><span>Increment</span></div> 
     </div> 
    } 
} 

App = connect((state)=> { 
    return {value: state.app.value} 
}, {increment})(App); 

module.exports = React.createClass({ 
    render:()=> { 
     return <Provider store={store}><App /></Provider> 
    } 
}); 

とここにある:ここで

は私のWebPACKの設定ファイルである:

var path = require('path'); 
var webpack = require("webpack"); 
var node_modules_dir = path.resolve(__dirname, 'node_modules'); 
var config = { 
    entry: path.resolve(__dirname, 'index.js'), 
    output: getOutput(), 
    plugins: [ 
     new webpack.optimize.UglifyJsPlugin(), 
     new webpack.optimize.DedupePlugin(), 
     new webpack.DefinePlugin({ 
      'process.env': { 
       'NODE_ENV': JSON.stringify('production') 
      } 
     }) 
    ], 
    devtool: process.env.NODE_ENV === 'production' ? false : "eval", 
    module: { 
     loaders: [ 
      { 
       test: /\.scss$/, 
       include: /src/, 
       loaders: [ 
        'style', 
        'css', 
        'autoprefixer?browsers=last 3 versions', 
        'sass?outputStyle=expanded' 
       ] 
      }, 
      { 
       test: /\.(jpe?g|png|gif|svg)$/i, 
       loaders: [ 
        'url?limit=8192', 
        'img' 
       ] 
      }, 
      { 
       test: /\.jsx?$/, 
       exclude: (node_modules_dir), 
       loaders: [ 
        'react-hot', 
        'babel-loader?presets[]=stage-0,presets[]=react,presets[]=es2015', 
       ] 
      }, { 
       test: /\.css$/, 
       loader: 'style-loader!css-loader' 
      } 
     ] 
    } 

}; 

module.exports = config; 

function getOutput() { 
    if (process.env.NODE_ENV === 'production') { 
     return { 
      path: path.resolve(__dirname, 'dist'), 
      filename: 'bundle.js' 
     } 
    } else { 
     return { 
      publicPath: 'http://localhost:3000/', 
      filename: 'dist/bundle.js' 
     } 
    } 
} 

とここに私のコードです変更されました

module.exports = require('./lib/React'); 
01 Reduxのような他のNPMはまた、NPMを反応させる使用されているよう

のreact.jsファイルに

module.exports = window.React; 

には、モジュールを反応させます。

react npmのreact.jsファイルにこのパッチを適用するのは良いことですか?

このように2つのバンドルを作るのは良いことですか?

+2

166キロバイト大のjsではありません...あなたはGZIPを有効にした場合、これは実際のファイルの読み込みサイズを小さくします。.. gzipのは、これは単なるサンプルであるウェブサーバ側またはノードサーバ – abhirathore2006

+0

のいずれかを有効することができます。私のライブウェブアプリケーションのバンドルサイズは1.3 MBに近いです。私はそれを減らそうとしています。 –

+0

ExtractTextPluginを使ってバンドルからCSSを抜き出すこともできます – abhirathore2006

答えて

関連する問題