开发脚手架及封装自动化构建工作流
一、简答题
1、Webpack 的构建流程主要有哪些环节?如果可以请尽可能详尽的描述 Webpack 打包的整个过程。
- 根据用户在命令窗口输入的参数以及 webpack.config.js 文件的配置,得到最后的配置。
- 根据上一步得到的最终配置初始化得到一个 compiler 对象,注册所有的插件 plugins,插件开始监听 webpack 构建过程的生命周期的环节(事件),不同的环节会有相应的处理,然后开始执行编译。
- 根据 webpack.config.js 文件中的 entry 入口,开始解析文件构建 AST 语法树,找出依赖,递归下去。
- 递归过程中,根据文件类型和 loader 配置,调用相应的 loader 对不同的文件做不同的转换处理,再找出该模块依赖的模块,然后递归本步骤,直到项目中依赖的所有模块都经过了本步骤的编译处理。编译过程中,有一系列的插件在不同的环节做相应的事情,比如 UglifyPlugin 会在 loader 转换递归完对结果使用 UglifyJs 压缩覆盖之前的结果;再比如 clean-webpack-plugin ,会在结果输出之前清除 dist 目录等等。
- 递归结束后,得到每个文件结果,包含转换后的模块以及他们之间的依赖关系,根据 entry 以及 output 等配置生成代码块 chunk。
- 根据 output 输出所有的 chunk 到相应的文件目录。
2、Loader 和 Plugin 有哪些不同?请描述一下开发 Loader 和 Plugin 的思路。
答:Loader 专注实现资源模块的转换和加载(编译转换代码、文件操作、代码检查);Plugin 解决其他自动化工作(打包之前清除 dist 目录、拷贝静态文件、压缩代码等等)
二、编程题
1、使用 Webpack 实现 Vue 项目打包任务
具体任务及说明:
先下载任务的基础代码 百度网盘链接: https://pan.baidu.com/s/1pJl4k5KgyhD2xo8FZIms8Q 提取码: zrdd这是一个使用 Vue CLI 创建出来的 Vue 项目基础结构;有所不同的是这里我移除掉了 vue-cli-service(包含 webpack 等工具的黑盒工具);这里的要求就是直接使用 webpack 以及你所了解的周边工具、Loader、Plugin 还原这个项目的打包任务;尽可能的使用上所有你了解到的功能和特性
package.json
1 | { |
.eslintrc
1 | { |
webpack.common.js
1 | const webpack = require("webpack"); |
webpack.dev.js
1 | const webpack = require("webpack"); |
webpack.prod.js
1 | const common = require("./webpack.common"); |
作业要求
本次作业中的编程题要求大家完成相应代码后(二选一)
- 简单录制一个小视频介绍一下实现思路,并演示一下相关功能。
- 提交一个项目说明文档,要求思路流程清晰。
最终将录制的视频或说明文档和代码统一提交至作业仓库