目录
具体原理
一句话解释就是:解析配置、构建依赖图、解析模块并自动化代码分割,生成文件、输出到指定目录中
以下是具体说明:
1.解析配置:Webpack 根据配置确定入口文件、输出路径、加载器和插件等。
2.构建依赖图: 从配置的入口文件开始,递归地解析和分析模块的依赖关系,生成一个包含各模块及其依赖关系的依赖图。每个模块在解析时都会被处理,以确定其依赖的其他模块。
3.加载和转换模块:Webpack 使用加载器将不同类型的文件(如 ES6、TypeScript、SCSS、图片等)转换成浏览器能够理解的 JavaScript 模块。
4.代码分割:为了优化打包结果,Webpack 支持代码分割。这意味着它可以将应用程序的代码拆分成多个小包,以便实现按需加载。这样可以减少初始加载时间,提高应用程序性能。
5.生成代码:在所有模块都被加载和转换之后,Webpack 会根据依赖图将所有模块打包成一个或多个 bundle 文件。生成的代码会包含模块的定义和加载逻辑,以便在浏览器中正确运行。
6.输出文件:将生成的 bundle 文件输出到指定的目录中,过程可能会包括压缩、混淆、哈希命名等,以优化文件大小和加载速度。
多环境打包的具体问题
1.环境变量的打包,关于静态值与动态值:
在打包时,环境变量会被替换为静态值。例如,axios.js文件中的 baseURL 打包后使用的是打包时设定的环境变量值。
2.在Vue.CLI中,不同的环境配置文件有不同的优先级。
(1).env
(2).env.[development / production …]
而第二类的环境配置会覆盖.env文件内相同变量的配置,如.env.production、.env.development等,代码举例如下:
NODE_ENV=production
VUE_APP_AUTH_PATH=http://xx.xxx.xx.xx:3000
VUE_APP_DEFAULT_PATH=http://xx.xxx.xx.xx:3000
当.env有“VUE_APP_AUTH_PATH=http://aa.aaa.aa.aa:3000”时,如果.env.development也有“VUE_APP_AUTH_PATH=http://xx.xxx.xx.xx:3000”,那么最后打包得到的“VUE_APP_AUTH_PATH=http://xx.xxx.xx.xx:3000
”。
相应注解
1.加载器(Loaders):一种预处理器,它可以在模块加载前对模块内容进行转换,例如将 ES6 转换成 ES5,将 SCSS 转换成 CSS 等。
2.插件(Plugins)
3.依赖图(Dependency Graph)
4.代码分割(Code Splitting)
5.按需加载(Lazy Loading)