Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统,它确保了各种构建工具能够基于智能的默认配置即可平稳衔接,这样你可以专注在撰写应用上,而不必花好几天去纠结配置的问题。与此同时,它也为每个工具提供了调整配置的灵活性,无需 eject。
如何看 webpack 最终配置
1 | "scripts": { |
如何统计打包的时间
speed-measure-webpack-plugin 是一个专门测试 webpack 构建速度的工具,可以在终端列出所有 Loader 和 Plugin 的耗时。
1 | const SpeedMeasurePlugin = require('speed-measure-webpack-plugin') |
webpack 打包结束后,输出的时间统计
1 | SMP ⏱ |
配置 vue.config.js
添加别名 resolve.alias
目前的配置
1 | configureWebpack: { |
扩展名配置 resolve.extensions
extensions 的配置原则是频率出现高的排前面,数组长度尽量小,以下是 vue-cli 中的默认配置 [‘.mjs’, ‘.js’, ‘.jsx’, ‘.vue’, ‘.json’, ‘.wasm’]
我们的文件没有 .mjs、.jsx,所以在 vue.config.js 中我这样配置会更好:
1 | chainWebpack: (config) => { |
确定搜索目录 resolve.modules
当搜索模块的时候告诉 webpack 确定的目录文件,这样可以避免无用的检索。webpack 默认的配置是相对路径,检索当前目录的下的 node_modules,如果没有则再会去根目录下的 node_modules,直到没有最后抛错。
1 | chainWebpack: (config) => { |
上面也是默认的
忽略非模块化 Library module.noParse
忽略那些文件中不含有 import, require, define 的调用,或任何其他导入机制的 library。忽略大型的 library 可以提高构建性能。下面是默认配置,请根据项目需要修改
1 | configureWebpack: { |
动态链接库 DllPlugin
DllPlugin 和 DllReferencePlugin 实现了拆分 bundles,可以将一些不常被更新的第三方依赖预编译到一个或多个 manifest.json 中,做到一次打包就可以重复引用的效果。比如说我们 vue 全家桶、axios 等依赖,只要版本不升级就没必要多次打包,我们可以让这些依赖与业务代码分开打包。
使用方式大致分三步:
- 利用 DllPlugin 配置预先打包出 _.manifest.json 文件。
- 在 webpack 主配置中设置 DllReferencePlugin,告诉 webpack 使用了哪些动态链接库。
- 在页面文件中加载所有的动态链接库。
webpack.dll.config.js
1 | const path = require("path"); |
vue.config.js
1 | configureWebpack: { |
hard-source-webpack-plugin
webpack4 抛弃了使用 dll,hard-source-webpack-plugin 就是一个很好的替代者,它可为模块提供中间缓存步骤。第二次构建将明显更快。
外部扩展(external)
externals 配置选项提供了「从输出的 bundle 中排除依赖」的方法,也是个人最提倡的采用 script 引入 CDN 资源
分环境压缩代码
在 development 环境时,我们可以关闭压缩来提升打包速度
1 | chainWebpack: (config) => { |
打包后的代码质量
使用 webpack-bundle-analyzer 分析工具,在启动打包完成后,会在 8888 端口显示一个交互式可视化 bundle treemap。
其他
升级打包机配置