webpack 简明教程----以vue npm run build流程为例
webpack 简明教程----以 vue npm run build 流程为例
webpack 的执行过程
在学习 webpack 配置的时候, 我们会执拗于 webpack 一个个的配置项, 把 webpack 配置搞成了面向运气调参. 但实际上, 如果我们从 webpack 的执行过程开始的话, webpack 其实是很简单的.
webpack 的执行过程主要是这么几步:
- 确定配置参数, 把
webpack.base.conf.js
和webpack.prod.conf.js
合并到一起, 作为参数启动 webpack()方法 - 根据配置里的
entry
, 找到所有的入口文件 - 从入口文件出发, 查找依赖并调用
module.rule
里配置的loader
进行加载, 把资源转换成对应的 js 资源, 比如, 利用url-loader
把图片转成 base64, 利用type-script-loader
把TypeScript
代码转换成标准的 js 代码. TypeScript
代码转成 js 后, 可能会产生新的依赖(ts 里不可识别的 import 被转成了可识别的 js 的 import), 所以需要递归的执行这种转换, 直到所有依赖全部转换为 js 对象. 这样每一个入口配置都对应一个 js 对象, webpack 的工作基本完成- 按照
output
里的配置, 将 js 对象输出为文件(静态资源或图片文件) - 执行完毕
需要注意的是在这期间 webpack 主进程只进行了加载, 输出工作, 没有做其他的优化. 我们所看到的优化其实是 webpack 在打包过程中触发各种生命周期事件, 唤起plugin
(UglifyJs, ExtractText, CommonsChunk)对内容进行处理之后的结果.
知道了 webpack 的执行流程, 再看 vue 的 build 流程就清楚多了
vue build, 从项目初始化到 webpack 构建
我们来从头捋一下 vue 执行npm run build
的整个流程
首先, npm run build
对应的是执行 package.json 里scripts
项中配置的命令, 也就是node build/build.js
命令实际执行的是build/build.js
这个文件, 我们来看一下文件的内容
1 |
|
从build.js
的注释里不难看出, 这个文件只做了两件事:
- 删除旧的编译结果
- 再进行一次编译操作
编译操作里唯一的变量就是 webpack 配置项. 然后我们来看一下 webpack 的配置文件内容:
webpack.base.conf.js
=>
1 |
|
webpack.prod.conf.js
=>
1 |
|
结束. webpack 的打包其实就这些东西. 在下一篇文章里, 我们会借助修改配置文件, 为脚手架添加以下功能
- 添加 vue 多页面支持, 支持编译输出多个项目
- [debug 配置]允许不同开发者在本地调试时只编译自己的项目, 以加快本地调试速度
- 根据项目 tag(hg/git)自动生成 map.json, 方便进行线上版本控制
- 根据环境自动为静态资源指定不同的 cdn 地址
- 支持自定义本地 mockServer 域名和转发规则
- [debug 配置]允许不同开发者通过 debug 配置不同的 mock 域名
- axios 支持 jsonp
参考资料
- 深入浅出 webpack, 建议重点看下 第五章第一节 webpack 编译流程, 第二章 webpack 配置详解, 这篇文章其实就是对这两部分的概括
- vue 多页面, 笔者在 vue 脚手架的基础上, 通过修改 webpack 配置实现的多页面版的 vue 项目
webpack 简明教程----以vue npm run build流程为例
https://www.yaozeyuan.online/2018/04/15/2018/04/webpack 简明教程----以vue npm run build流程为例/