打包优化

new parallelUglifyPlugin({
    cacheDir: '.cache/',
    uglifyJS: {
        output: {
            comments: false, //false :关闭注释 

        },
        compress: {
            warnings: false,
            drop_console: true,
            collapse_vars: true,
            reduce_vars: true,
        },
    },
    sourceMap:true,// 开启sourcemap
})

注意:有的时候, 这个插件第一次运行的时候会报错,报不是空目录,可能是与删除dist目录的插件clean-webpack-plugin 有关,我现在也搞不清楚了,之前在配置的时候,总是报错,把 webpack-parallel-uglify-plugin 注释掉后就可以用了,今天我再运行webpack-parallel-uglify-plugin 时还是报错 ,我先关闭了clean-webpack-plugin ,在运行就可以了。接着又打开clean-webpack-plugin ,不报错了。搞不懂!!!

现在搞清楚了,第一次运行webpack-parallel-uglify-plugin 时不能让.cache(压缩缓存)有内容,必须是空的,或是没有这个目录

  • 第三方库的抽离,在webpack4.x之前是使用的 webpack.optimize.CommonsChunkPlugin ,来抽取公共的代码和分离第三方的代码,具体可以看https://blog.csdn.net/github_26672553/article/details/52280655,不过webapck4.x,已经弃用这个插件了,改为 optimization.splitChunks 和 optimization.splitChunks ,其中 optimization.splitChunks 选项里webpack会添加一个只包含运行时(runtime)额外代码块到每一个入口。(这个需要看场景使用,会导致每个入口都加载多一份运行时代码)https://segmentfault.com/a/1190000013476837

  • 有时需要多文件的入口,这对个文件里就肯定有相同额部分。比如 common.js 是个工具插件,a.js引用了common.js, b.js也引用了common.js。 当我们把a.js和b.js分别作为入口文件的时候,他们两个都加载了common.js,所以可以提供一个公共的js让这两个文件引用,这样减少代码的重复。

  • 静态资源拷贝插件 copy-webpack-plugin

  • 按需加载 在webpack 的文件输出配置output中加上按需加载生成js 文件的配置 chunkname ,关于filename 与 chunkname 的理解可以看 https://www.jianshu.com/p/d9ebab57bca1。按需加载是需要搭配js文件里的代码使用的,光设置webpack是什么效果都没有的。拿react的路由做例子,在每一个路由点击的时候加载对应的组件。

react 配置 : 在react-router4后不再通过 getComponent来按需加载路由组件,通过bundle-loader更加简化了按需加载。安装 bundle-loader --save-dev 参考文件https://www.vanadis.cn/2017/08/05/react-router-webpack-load-on-demand/

Last updated

Was this helpful?