【项目-喵内0∞0记账-meowney-∞】项目复盘与总结以及部署
大纲链接 §
[toc]
项目用到的知识点 ⇧
- 类组件(
class
) + 装饰器(TypeScript
),使用第三方库:类组件 + TS装饰器vue-property-decorator
- 装饰器可以极大程度简化
Vue
组件中各种状态的声明,如声明组件@Component({})
- 装饰器可以极大程度简化
mixins
(TS写法)- 创建标签
export default class Labels extends mixins(tagHelper)
<button @click="createTag">添加新标签</button>
- 创建标签
- 使代码逻辑的 高内聚,Vue 使代码逻辑 低耦合,选项写法 对比 TS装饰器写法:
- 构造选项
@Component
,可添加组件名 prop
装饰器写法@Prop
后期修改为@PropSync
method
选项在类组件中直接写成ES6
的类中的函数声明fn() {}
computed
选项在 在类组件写法getter
语法:get currentTag() { return ...; }
watch
装饰器写法@Watch
v-model
装饰器写法@Model
后期修改为@ModelSync
$emit
装饰器写法@Emit
- 提供/注入
@Provide
、@Inject
- 构造选项
slot
插槽,子组件中占位,父组件中将内容填充到子组件双标签里,后期应用具名插槽SVG symbols
ESLint
屏蔽localStorage
5~10MsessionStorage
配合路由守卫- 编程思想
- 表驱动编程
:class="{k: v, k: v}"
- 对不同的按钮动态绑定对应事件
- 模块化
Store
Module
- 重构技巧 抽离 提取 封装 混入 重用 功能集中归纳
- 命名严谨性
- 表驱动编程
Vue
生态/全家桶Vue-router
hash
SPA
hash
路由- 路由守卫 +
sessionStorage
Vuex
- 模块化
VuePress
在项目目录内写项目文档
- 第三方库
Day.js
用手机在本地网络调试页面 ⇧
同一局域网访问xxx:8080
⇧
Win10
防火墙开启入站规则
yarn serve
后@vue/cli
服务提供一个网络访问端口,例如Network: http://192.168.0.111:8080/
win10
打开防火墙高级设置- 设置入站规则
- 设置端口
8000-8888
- 全部勾选应用
- 设置名称
- 手机输入
url
Network: http://192.168.*.*:****/
- 注意PC和手机需要在同一
wifi
下
远程调试 ⇧
- USB有线连接 Android 设备
- 设备安装 Chrome for Android
- win11 安卓虚拟机 或 M芯片 Mac IOS应用
- 注意:
window.alert
不能在PC端显示,在手机端消失debugger
断点调试,不推荐console.log
调试,推荐
- 调试浏览器在一台设备上互斥,必须关闭一种浏览器才可打开另一种显示调试
参考
- Chrome远程调试工具
- Edge 远程调试 远程调试 Windows 10 设备入门
- chrome远程调试WebView
- Android 设备的远程调试入门
- 远程调试 Android 设备网页
- 在安卓设备上使用 Chrome 远程调试功能
- 深入理解 Chrome DevTools
- 使用Safari或者Chrome远程调试IOS Safari中的页面
- Chrome远程调试
- Chrome 远程调试协议不完全指南
腾讯 vConsole
⇧
- 略
移动端调试神器 Whistle
⇧
一些功能性修改 ⇧
干掉手机浏览器地址栏 和 自带功能条(下巴) ⇧
- 搜 安卓 浏览器 隐藏 地址栏
Android browser hide navigation bar
- 移动端 滚动隐藏浏览器地址栏和工具栏
- 自动滚动到页面底部
window.onload = () => {setTimeout(()=> {window.scrollTo(x:0, y: 10000)}, 0)};
键盘文字改用icon
图标 ⇧
- 还原默认标签
- 判断标签是否为空
/src/store/modules/recordStore.ts
添加状态createRecordError: null
- 在
Money.vue
的saveRecord()
里判断if (this.$store.state.createRecordError === null) {window.alert('已保存');}
项目描述怎么写 ⇧
ReadMe.md
- 喵内记账是一款基于
Vue
、Vue-Router
、Vuex
、TypeScript
的单页面的极简记账应用 - 由本人参考开源UI,独立实现代码,期间遇到了很多
webpack svg
、Vuex
和TypeScript
方面的问题,解决过程记录在本人的博客(最难的问题是…) - 源代码完全使用
TypeScript
实现,用到了类组件和装饰器语法 - 源码地址
- 预览地址
部署到 GitHub/Gitee
& 设置 publicPath
⇧
yarn build
区别于
webpack dev server
的yarn serve
使用serve
⇧
安装
yarn global add serve
(或者yarn global add http-serve
)
执行
serve -s dist
- 运行打包好的资源 (区别于
yarn serve
运行未打包的资源) - 检测是否正确打包的
GitHub Pages 手动推送更新 ⇧
配置vue.config.js
⇧
- 设置部署路径 仓库名
publicPath: process.env.NODE_ENV === 'production' ? '/meowney-0-website/' : '/',
创建deploy.sh
自动化脚本 ⇧
|
|
- 构建
yarn build
- 新建页面预览的仓库:
git@github.com:xmasuhai/meowney-0-website.git
- 区别于存放源代码的仓库
- 终端运行
sh deploy.sh
- 每次更改
vue.config.js
都需要重新运行deploy.sh
构建完成 设置预览 ⇧
- 自动开启
GitHub Pages 分支
- 预览页面1
部署到码云,加快访问速度 ⇧
- 在项目 代码同一栏的从右数第二项 服务 栏中选
Gitee Pages
- 唯一要注意的是,码云免费版不支持自动更新代码,所以你每次部署之后,要登录码云的网站,手动点击「更新」按钮才能更新网页
- 项目地址
参考
设置二维码 ⇧
- PC端即显示二维码,提示手机扫码
- 移动端即隐藏二维码
- 判断屏幕宽度
document.documentElement.clientWidth
使用在线工具,将项目链接转为二维码图片
使用草料网生成二维码 ⇧
抽成
QRCode.vue
组件
|
|
页面部署到 GitHub
后,没有二维码展示出来。 这个时候你该怎么办? ⇧
- 打开开发者工具的
Network
(这个动作应该形成条件反射,任何网络问题都应该打开Network
,切记!) - 发现
qrcode.png
是404
错误(404
是红色的,你应该一眼就看到) - 404 错误是因为路径写错了(不要告诉我你不知道这句话,我会很失望的)
- 这说明
'/qrcode.png'
这个路径不对,正确的路径'./qrcode.png'
修复:本地预览 dist
目录发现 JS
路径错误 ⇧
使用
yarn build
得到dist
目录后,再用serve -s dist
然后在本地浏览器打开http://localhost:5000
会看到如图报错
- 这是因为在本地环境,这个
JS
的路径不对;但是在GitHub Pages
里,这个JS
的路径其实是对的。 - 看
vue.config.js
,其实已经考虑了这个问题,它会在production
环境(也就是GitHub Pages
上)使用/morney-3-website/
作为路径前缀,在本地使用/
作为路径前缀
- 但实际情况是,本地的
dist
使用了/morney-3-website/
,正确的前缀应该是/
。 - 为什么
vue.config.js
考虑了这个问题,还是会出现这个问题呢?
怎么解决这个问题
步骤如下:
yarn add cross-env
(这个cross-env
是Windows
用户必须的,其他系统的用户装了它也没事,不会有任何副作用)- 在
package.json
里添加一个"script"
字段- 内容为
"build:dev":"cross-env NODE_ENV=development yarn build"
- 内容为
- 效果如图所示(注意行尾的逗号)
- 使用
yarn build:dev
得到的 dist 即可在本地用serve
预览 - 使用
yarn build
得到的dist
即可在GitHub Pages
上正常预览。
其他一些改进 ⇧
添加
Header
组件解决 手机浏览器地址栏遮挡内容问题
- 牺牲标题栏
限制各项内容的高度,处理滚动事件
- 防止内容过多 挤下导航栏
统一处理 用户提示信息 功能性报错
createTagError
createRecordError
- 注意初始时需要置空错误
state.createTagError = null;
map
声明任意字符串作为key-value
结构
const map: { [key: string]: string} = { 'tag name duplicated': '标签名重复了', };
参考文章
- 无
相关文章
- 作者: Joel
- 文章链接:
- 版权声明
- 非自由转载-非商用-非衍生-保持署名