在我们构建单页面应用(vue, React)或封装插件时,很大机会用到webpack,这个JavaScript的打包工具.
但项目代码日益增多时,webpack一些简单的配置会暴露种种弊端(打包时间长,代码大).
以下是结合自身开发和学习webpack过程解决问题的总结.
很多人都知道webpack.optimize.CommonsChunkPlugin这个插件是用来提取公共库的,但这个插件也解决不了公共库重复打包的问题.
然而,DllPlugin这个插件就可以解决.
这个插件会先把公共库打包.
它自己拥有独立的webpack配置文件,配置文件入口处是需要打包的公共库.
当它打包完后,会生成公共的js包和manifest.json.
manifest.json是用来让主配置文件DLLReferencePlugin映射到相关的依赖上去的
当我们使用webpack打包后的代码都经过编译的,所以变得难以调试.
所以webpack给了devtool的api,会通过Source Map找出出错的正确位置.
选择devtool的cheap-module-eval-source-map原因是,每个模块使用eval()大幅提高持续构建效率和没有生成列映射节省构建时间(浏览器引擎会自动给出列信息).
使用extract-text-webpack-plugin将各个脚本里的样式提取到出来.
如果设置allChunks: true会使提取出来的样式合并到一个文件.
使用optimize-css-assets-webpack-plugin将样式进行压缩.
使用uglifyjs-webpack-plugin将脚本进行压缩.
webpack每个模块都会放入一个闭包函数中.
使用webpack.optimize.ModuleConcatenationPlugin会将相关联的模块放入一个闭包里.
从而减少闭包的数量.
使用DllPlugin或webpack.optimize.CommonsChunkPlugin会将公共的代码提取出来打包到其他文件.
避免重复打包,从而减少包的大小.
当服务开启预压缩时.
会优先获取以文件名称加.gz结尾的文件,这份文件是压缩过后的文件,体积会小.
使用CompressionWebpackPlugin会生成对应压缩文件.
相关推荐:
以上是webpack的优化策略的详细内容。更多信息请关注PHP中文网其他相关文章!