
























我司现在使用vue3做为新项目的框架,设计了如下的目录:
|--src
|-- assets/
|-- boot/
|-- components/
|-- config/
|-- lib/
|-- projects/
|-- flight/
|-- promotion/
|-- member/
|-- login/
|-- router/
|-- store
|-- App.vue
|-- main.js
简要说明:projects 下的每个目录,都是一个独立的项目,它们共同依赖外部的模块。
生产环境刚开始使用 vite 默认的打包逻辑,它有一些问题:
所以我动手改造了下打包过程,具体思路如下:
这解决开头提到的几个问题,顺便还提了一个 rollup 的 bug issue。
但随着对项目的深入理解,我看到了一些有意思的情况。
首先,projects 下的项目彼此间并无太多交集,甚至可以看着是一个个独立的项目,但它们组成了一个大型单页应用(SPA)。所以,每次打包的时候,都得全量构建一次。可以预见的是,随着代码量的增加,生产环境的打包时间会越拉越长。
其次,虽然我们多数时候只会访问几个页面,但却不得不加载一堆不相关的依赖。这减缓了首屏的渲染时间,影响用户体验。
第一步:生成公共服务包
公共服务包应具有哪些内容?一个原则——内容公用、接口稳定。
具体到我们项目,应包含 vue、vuex、vue-router 源码及相关配置,请求(request)、登录注册(auth)、支付(payment)、全局组件等。将它们打包成一个文件,假设叫 common-service-[hash].js,此文件导出公共接口,通过外链(<script src="common-service-[hash].js">)的方式,供他项目使用。
第二步:每个项目单独构建
每个子项目独立开发、构建,最终发布到同一个静态服务器中。
第三步:路由跳转中加载依赖文件
虽然每个子项目相对独立,但我们依然想要获得单页应用的使用体验。那么就需要在路由跳转前,把对应的项目依赖加载完毕后,再使用 vue-router 进行跳转。
软件开发没有银弹。新架构至少存在以下问题。
我们通过 script 标签在 .html 中引入公共服务包。所以当公共服务包发生变更,只需替换所有 .html 文件中的内容,然后上传到服务器对应的目录。
冗余是肯定有的,但可以根据具体场景优化
vuex
可以通过应用的 manifest.json 获取初始依赖,但这至少会增加一次网络请求。
软件复杂度不会消失,只会转移。
问题是,这值得么?
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。