目录
git rebase和 git merge都是用于合并分支的git命令,这两个命令都能将一个分支合并到另一个分支,但两者的合并方式有很大不同
Loader:
Plugin:
webpack-parallel-uglify-plugin
: 多进程执行代码压缩,提升构建速度webpack-bundle-analyzer
: 可视化 Webpack
输出文件的体积speed-measure-webpack-plugin
: 可以看到每个 Loader
和 Plugin
执行耗时 (整个打包耗时、每个 Plugin
和 Loader
耗时)mini-css-extract-plugin
: 分离样式文件,CSS
提取为独立文件,支持按需加载总结就是三个阶段:
Compiler
对象,加载所有配置的插件,执行run方法。entry
参数找到入口文件Loader
对模块进?翻译,再找出该模块依赖的模块,再递归本步骤直到所有??依赖的?件都经过了本步骤的处理;Loader
翻译完所有模块后,得到了每个模块被翻译后的最终内容以及它们之间的依赖关系;Chunk
,再把每个 Chunk
转换成?个单独的?件加?到输出列表,这步是可以修改输出内容的最后机会;Plugin
,实例化 Compiler
Entry
出发,针对每个 Module
串行调用对应的 Loader
去翻译文件的内容,再找到该 Module
依赖的 Module
,递归地进行编译处理Module
组合成 Chunk
,将 Chunk
转换成文件,输出到文件系统中Webpack
的持久缓存功能,避免重复构建没有变化的代码。可以使用cache: true选项启用缓存。thread-loader
、happypack
等插件可以将构建过程分解为多个进程或线程,从而利用多核处理器加速构建。DllPlugin
可以将第三方库预先打包成单独的文件,减少构建时间。HardSourceWebpackPlugin
可以缓存中间文件,加速后续构建过程。Webpack
的Tree Shaking
机制,去除未使用的代码,减小生成的文件体积Webpack
的持久缓存功能,避免重复构建没有变化的代码。可以使用cache: true选项启用缓存。thread-loader
、happypack
等插件可以将构建过程分解为多个进程或线程,从而利用多核处理器加速构建。DllPlugin
可以将第三方库预先打包成单独的文件,减少构建时间。HardSourceWebpackPlugin
可以缓存中间文件,加速后续构建过程。Webpack
的Tree Shaking
机制,去除未使用的代码,减小生成的文件体积他们都是前端构建工具,但vite
构建速度相对于webpack
还是有一些速度优势
vite
是利用浏览器的原生ES moudle
,采用按需加载的当时,而不是将整个项目打包。而webpack
是将整个项目打包成一个或多个bundle
,构建过程复杂。 HMR热更新: vite
使用浏览器内置的ES
模块功能,使得在开发模式下的热模块替换更加高效,那个文件更新就加载那个文件。它通过WebSocket
在模块级别上进行实时更新,而不是像Webpack
那样在热更新时重新加载整个包。Vite
的构建速度也通常比Webpack
快,因为Vite
的按需加载策略避免了将所有代码打包到一个大文件中。而且,Vite
对于缓存、预构建等方面的优化也有助于减少构建时间。
Vite
利用浏览器的缓存机制,将依赖的模块存储在浏览器中,避免重复加载。这使得页面之间的切换更加迅速。Vite
不需要预编译或生成中间文件,因此不会产生大量的临时文件,减少了文件IO操作,进一步提升了速度。Monorepo
是一种将多个项目代码存储在一个仓库的代码管理方式,将不同的项目代码放在一个仓库中,优缺点如下: 优点:
更好的实现代码复用,方便代码管理 可以复用项目基础设施,不需要每个项目都建立一遍 更好的CR 子项目模块之间的关系更加透明,可以实现一次命令完成所有部署。 管理依赖变得更加简单,可以在一个统一的环境中处理依赖库的版本和更新。
缺点:
Webpack
的Tree Shaking
机制,去除未使用的代码。这可以从模块中移除那些在项目中没有被引用到的部分。UglifyJS
或Terser
来压缩JavaScript
代码。这会删除空格、注释和不必要的代码,减小文件体积。Webpack
中使用生产模式,通过设置mode: 'production'
来启用优化。这会自动应用一系列性能优化策略,包括代码压缩和Tree Shaking
。Brotli
和Gzip
,来对静态资源进行压缩,从而减小传输体积。Tree Shaking
也叫摇树优化,是一种通过移除多于代码,从而减小最终生成的代码体积,生产环境默认开启。
原理:
Tree Shaking
的基础是ES6模块系统,它具有静态特性,意味着模块的导入和导出关系在编译时就已经确定,不会受到程序运行时的影响。Webpack
构建过程中,Webpack
会通过静态分析依赖图,从入口文件开始,逐级追踪每个模块的依赖关系,以及模块之间的导入和导出关系。Webpack
会标记每个变量、函数、类和导入,以确定它们是否被实际使用。如果一个导入的模块只是被导入而没有被使用,或者某个模块的部分代码没有被使用,Webpack
会将这些未使用的部分标记为"unused"
。Webpack
会在最终的代码生成阶段,通过工具(如UglifyJS
等)删除这些未使用的代码。这包括未使用的模块、函数、变量和导入。