【前端工程化】Vite关于Vue3/React项目工程化总结(献给2021-1024的礼物)
时间已经是2021年了,马上也就2022年了,现如今自己的关注点对于新知识的狂热程度也比当年稍减,更多的关注于该新玩意对于现有项目是否有提升的可能性。更多地关注于项目的工程化和稳定性。关于Vite的项目工程化实践也有快一年了,从Vue3刚发布的踩坑实践到现在几乎可以覆盖99.5的机型兼容.是时候在1024节,给大家献上一篇总结啦~
当然也可以查看我之前在公司内部分享的ppt:vadxq的分享ppt小栈
技术栈
Vue3 工程化项目实践demo
- 编程语言:TypeScript 4.x
- 构建工具:Vite 2.x
- 前端框架:Vue 3.x
- 路由工具:Vue Router 4.x
- 状态管理:Vuex 4.x
- CSS:Sass + Postcss
- HTTP 工具:Axios
- MOCK: mockjs + vite plugins
- 移动端调试插件: vite-plugin-vconsole
- Git Hook 工具:Husky + Lint-staged
- 代码规范:EditorConfig + Prettier + ESLint
- 提交规范:Commitlint + changelog
项目细节介绍
- .husky: 关于Git Hook工具的一些命令配置
- .vscode: 关于vscode的一些配置,强制开启一些检测插件
- build: 关于持续集成,构建和部署相关的node脚本
- mocks: mock数据
- public: 静态文件夹
- src: 主要代码相关
- .cz-config.js: 关于commit规范的配置
- .env: 环境变量配置
- .eslintrc/.eslintignore: eslint配置
- .gitignore: 懂得都懂
- .prettierignore/.prettierrc: 格式配置
- .stylelintrc.json: 样式格式化配置
- commitlint.config.js: commitlint配置
- index.html: index.html文件
- package.json
- postcss.config.js: postcss配置
- tsconfig.json
- vite.config.ts: vite配置
先谈谈Vue和React项目内部的实践
Vue3
跑Vue3,其实很简单,在src目录配置main.ts
和App.vue
入口文件即可。可以参考Vue3官方文档,本文不做过多描述。
而在Vite的配置也很简单,只需要引入@vitejs/plugin-vue
即可。配置就一句Vue()
。是不是很方便?当然,今天讲的更多是工程化方面,这里简单提一句,可以参考demo项目vite-vue-prod-template。
React
跑React,也很简单,在src目录配置main.ts
和App.tsx
入口文件即可。而在Vite的配置也很简单,只需要引入@vitejs/plugin-react-refresh
即可。配置就一句reactRefresh()
。非常的方便。可以参考demo项目vite-react-starter。
谈谈两者的工程化
关于结构约定
在前端,其实是很自由化的,模块化的,无处不在。但是对于公司项目来说,这种自由化,会导致项目在人才更替的时候,出现难以维护的情况,所以每一个项目,都需要相互约定一个特定的共同认可的项目结构。通用的几乎不需要修改的配置等提取出来,放入初始化项目里。根据业务类型区分不同的文件夹,约定特定的业务在特定的文件结构里进行编码。比如apis,编写与服务端交互的调用api接口代码。routes则为前端路由相关,styles为公共样式文件,views为页面代码,components为组件等等,这些约定每个团队可能都不一样,这里可以大家自己参考demo项目,与团队成员约定结构,这一步也是很重要的哟~
关于环境与构建相关
其实前端的部署很简单,将代码build出来即可。对于公司的项目来说,不可能只有两个环境:development和production。往往至少会有测试环境,甚至有多个测试环境和预生产环境。不同环境的打包也是不一样的,打包通过Vite的配置即可处理大部分情况,当然生产环境可能需要上传静态文件到OSS搭配CDN。这里需要根据自己公司的业务去做针对性处理。demo项目是做了在build下对项目上传到七牛CDN下的处理方式。实现细节可以参考build/build.ts
关于环境的处理
环境的处理其实只要设定mode即可
1 | // 在package.json |
关于Vite base的处理
这个是配置base,也就是index.html引入的.js/.css/静态文件等的前缀处理。比如index.html打包后引入app.bc8837848788.js,如果正式环境配置的是cdn情况下,或者是将静态文件放置在不同url赏,则可以在这里对不同情况进行处理。
1 | base: |
关于部署与持续集成
这一块根据自家团队的情况自己处理啦。其实也就是几条命令,clone代码,安装node_modules,然后就是build,有上传oss/CDN的可以加一行上传命令,建议写在build下,最后就是将代码copy到服务器或者是serverless。
关于团队规范和git flow
团队规范是我很在意的一点。这一块针对性的做了很多的处理,包括常规js/ts代码规范的检测,还有css代码,以及文件格式的检测和commit规范的检测
关于Husky/lint-staged和commitlint
配置在提交代码前进行代码检测是非常重要的!
1 | # 安装husky和lint-staged |
1 | # 安装commitlint |
配置检测,在根目录下的.husky
下需要配置命令,可以参考demo
1 | // pacakge.json |
关于配置提交commit格式的检测
1 | // pacakge.json |
1 | // .cz-config.js |
关于移动端调试Vconsole
yarn add -D vconsole vite-plugin-vconsole
1 | // vite配置,可以参考项目vite-plugin-vconsole的文档填写,兼容多环境情况 |
关于兼容性的处理
最难处理的其实就是proxy。
引入@vitejs/plugin-legacy
即可,vite的配置如下
1 | legacy({ |
关于mock的处理
引入vite-plugin-mock
即可
1 | viteMockServe({ |
关于日志收集
目前有阿里云的arms和自己搭建的sentry。
arms可以使用这个插件,根据不同环境去添加不同的arms。vite-plugin-arms
.
sentry直接使用sentry提供的插件即可。
总结
好了,这次的总结就到此结束了。Vite在正式项目上,几乎毫无压力,工程化的沉淀也差不多就这样啦,具体的业务表现就自由发挥啦。
今天是2021年的1024~在此祝所有程序员节日快乐~我们的狂欢🎉!献给2020-1024的礼物!
【前端工程化】Vite关于Vue3/React项目工程化总结(献给2021-1024的礼物)