美文网首页
webpack优化问题

webpack优化问题

作者: MrAlexLee | 来源:发表于2019-03-24 19:56 被阅读0次

    如何提高打包构建速度

    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打包文件中。

    相关文章

      网友评论

          本文标题:webpack优化问题

          本文链接:https://www.haomeiwen.com/subject/fvzuvqtx.html