1. 对 ArcGIS 的打包优化
问题一:打包速度
问题背景
- ArcGIS 库的体积巨大,且依赖关系非常复杂,无论是全量打包还是按需打包,都会带来打包时间过长和打包结果体积剧增的问题
解决思路:问题的本质是库的体积大所导致的整体体验问题,因此放弃打包,转而用 CDN 的方式引入
过程表述
首先,传统的 CDN 引入方式是通过 script 标签,指向 CDN 的地址实现引入;而 ArcGIS 的 CDN 的引入方式是在每一个 import 语句中都添加 CDN 地址,因此传统的 CDN 加速方案(开发环境使用本地资源,即 node_modules,生产环境使用 CDN)是行不通的。
所以开发环境也需要使用 CDN。那么我的解决方案是:配置了@arcgis 这样一个别名,这个别名会指向 CDN 的根路径;使用@arcgis 作为别名是因为常规的导入方式也是这种书写格式,因此在开发过程中,书写的代码并不需要作任何变更,常规的是如何书写就如何书写
问题二:相对路径引入 CDN,即与当前域名一致
问题背景
- 由于业务需要,生产环境的 CDN 地址与前端代码部署的地址一致,因此要利用浏览器的自动补全 url 机制,实现 cdn 的相对路径引入,且开发环境(本机地址)不受影响
解决思路:开发环境不受影响,意味着别名的路径指向不能变更,因此需要修改打包产物
过程表述
首先,手动修改打包产物是一个万能且简单的方案,无论是 VSCODE 还是其他编辑器,都有提供批量替换的功能。但是这种方案存在着一些缺点,比如:操作繁琐,每一次打包都需要手动执行一次替换操作;又比如:不利于 CI/CD 流程
什么是 CI/CD
CI(持续集成)/CD(持续部署)是一条管线,代码签入、测试、构建和部署直至生产阶段都在此管线线中逐步向前推进
针对这些问题,我想到了利用插件,自动化的帮我做到批量修改的操作,因此我实现了一个自定义的插件,用于生产环境的自动替换操作
插件实现:vite 插件提供了总多的钩子函数,其中有一个钩子叫做 closeBundle,这个钩子代表了打包产物的最终形成,因此利于我们做最终的替换操作。在 closeBundle 这个钩子中,利用 fs 模块循环读取打包文件,针对读取结果,使用 replace 作替换,重新写入当前文件
优化点
并不是所有功能模块都使用到 ArcGIS 库,没有用到 ArcGIS 库的打包产物不需要执行上述的替换操作,造成性能浪费,因此可以自定义分包策略,把用到 ArcGIS 的模块存放到单独的文件夹下,后续使用 fs 读取时,只需要读取此文件夹下的产物即可