Webpack大包大小

时间:2016-11-07 09:41:17

标签: reactjs webpack redux react-redux

由于webpack包的大小,我面临问题。

我的捆绑尺寸大小接近166 kb。我正在使用-p标志运行webpack。大多数大小是由于我的捆绑文件中的react模块捆绑在一起。所以,我要做的是我制作两个包:一个包含我的应用程序特定代码,另一个包含npm的缩小版本,不经常更改。

我的捆绑尺寸现在是20 Kb。

这是我的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'
        }
    }
} 

这是我的代码:

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>
    }
});

这是我的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"
  }
}

所以,我改变了

module.exports = require('./lib/React');

module.exports = window.React;
反应模块的react.js文件中的

,像redux这样的其他npm也使用反应npm。

在react npm的react.js文件中应用此补丁是否是件好事?

制作这样的两个捆绑包是件好事吗?

1 个答案:

答案 0 :(得分:0)

您可以使用源地图资源管理器来检测问题所在。

https://www.npmjs.com/package/source-map-explorer