webpack优化问题

2019-03-24  本文已影响0人  MrAlexLee

如何提高打包构建速度

externals

externals配置可以用来提取常用库

用DllPlugin和DllReferencePlugin(webpack内置插件)

利用DllPlugin和DllReferencePlugin预编译资源模块,通过DllPlugin来对那些我们引用但是绝对不会修改的npm包来进行预编译,再通过DllReferencePlugin将预编译的模块加载进来。需要配合add-asset-html-webpack-plugin(第三方库)一起使用。
具体用法,新建文件webpack.dll.conf.js文件,大概配置如下:

const path = require('path');
const webpack = require('webpack');
module.exports = {
  entry: {
    vendor: [
    'react-dom',
    'react'//提前打包一些基本不怎么修改的文件
    ]
  },
  output: {
    path: path.join(__dirname, './build/static/js'), //放在项目的static/js目录下面
    filename: '[name].dll.js', //打包文件的名字
    library: '[name]_library' //可选 暴露出的全局变量名
    // vendor.dll.js中暴露出的全局变量名。
    // 主要是给DllPlugin中的name使用,
    // 故这里需要和webpack.DllPlugin中的`name: '[name]_library',`保持一致。
  },
  plugins: [
    new webpack.DllPlugin({
      path: path.join(__dirname, '.', '[name]-manifest.json'), //生成上文说到清单文件,放在当前build文件下面,这个看你自己想放哪里了。
      name: '[name]_library'
    }),  
    //压缩 只是为了包更小一点 
    new webpack.optimize.UglifyJsPlugin({
      compress: {
        warnings: false,
        drop_console:true,
        drop_debugger:true
      },
      output:{
        // 去掉注释内容
        comments: false,
      },
      sourceMap: true
    })
  ]
};

在package.json里面写进去命令

    "build:dll": "webpack --config ./webpack.dll.conf.js//(具体路径自己定)",

DllPlugin会将公共依赖打包成一份JS,并且生成一份json配置表,然后在webpack.prod.conf.js文件中进行配置
大概配置如下

const path = require('path');
const webpack = require('webpack');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const AddAssetHtmlPlugin = require('add-asset-html-webpack-plugin');
const webpackConfig = {
  entry: 'index.js',
  output: {
    path: 'dist',
    filename: 'index_bundle.js',
  },
  plugins: [
    new webpack.DllReferencePlugin({
      context: path.join(__dirname),
      manifest: require('./build/vendor-manifest.json'),
    }),
    new HtmlWebpackPlugin(),
    new AddAssetHtmlPlugin({
      filepath: path.resolve(__dirname, './build/*.dll.js'),
    }),
  ],
};

happypack(第三方库)

使用Happypack 实现多线程加速编译

优化打包文件

OccurrenceOrderPlugin(webpack内置插件)

为组件分配ID,通过这个插件webpack可以分析和优先考虑使用最多 的模块,然后为他们分配最小的ID

UglifyJsPlugin(webpack内置插件)

压缩代码

clean-webpack-plugin(第三方库)

清空打包输出的文件夹

extract-text-webpack-plugin(第三方库)

它会将入口中引用css文件,都打包都独立的css文件中,而不是内嵌在js打包文件中。

上一篇下一篇

猜你喜欢

热点阅读