vite配置-设置路径别名
相对路径别名配置,使用 @ 代替 src
# 一、安装 @types/node
import path from 'path'
时,vscode 会出现波浪线,编译时会报错:TS2307: Cannot find module 'path' or its corresponding type declarations.
安装 @types/node 即可
pnpm i @types/node -D |
相对路径别名配置,使用 @ 代替 src
import path from 'path'
时,vscode 会出现波浪线,编译时会报错:TS2307: Cannot find module 'path' or its corresponding type declarations.
安装 @types/node 即可
pnpm i @types/node -D |
import { createRouter, createWebHistory } from 'vue-router'; | |
import pinia from './pinia'; | |
import { useUserStore } from '../store/user'; | |
const user = useUserStore(pinia); | |
// 不需要权限的页面 | |
const constantRoutes = [ | |
{ | |
// 登录 | |
path: '/login', | |
name: 'login', | |
component: () => import('../views/login/index.vue') | |
}, | |
{ | |
// 404 | |
path: '/:pathMatch(.*)', | |
name: 'notFound', | |
component: () => import('../views/error/notFound.vue') | |
}, | |
{ | |
// 无权限 | |
path: '/noPermission', | |
name: 'noPermission', | |
component: () => import('../views/error/noPermission.vue') | |
} | |
]; | |
const asyncRoutes = { | |
path: '/', | |
name: 'main', | |
component: () => import('../views/mainPage.vue'), | |
children: [ | |
{ | |
// 首页 | |
path: '/', | |
name: 'home', | |
component: () => import('../views/home/index.vue') | |
}, | |
{ | |
// 用户管理 | |
path: '/settingUser', | |
name: 'settingUser', | |
component: () => import('../views/setting/user.vue') | |
} | |
] | |
}; | |
const router = createRouter({ | |
history: createWebHistory('/'), | |
routes: constantRoutes | |
}); | |
router.addRoute(asyncRoutes); | |
router.beforeEach((to, from, next) => { | |
// 切换 router 时,取消 pending 中的请求 | |
if (window.__axiosPromiseArr) { | |
window.__axiosPromiseArr.forEach((ele, ind) => { | |
ele.cancel(); | |
delete window.__axiosPromiseArr[ind]; | |
}); | |
} | |
//token 过期 | |
if (localStorage.getItem('expires') && (new Date().getTime() - localStorage.getItem('expires')) / 1000 > 1) { | |
this.$message.error('登录失效,请重新登录', () => { | |
localStorage.removeItem('userInfon'); | |
localStorage.removeItem('token'); | |
localStorage.removeItem('expires'); | |
location.href = '/login'; | |
}); | |
return; | |
} | |
// 登录判断 | |
if (user.token) { | |
if (to.path === '/login') { | |
next({ path: '/' }); | |
} else { | |
// 权限判断 | |
next(); | |
} | |
} else { | |
if (to.path === '/login') { | |
next(); | |
} else { | |
next({ name: 'login' }); | |
} | |
} | |
}); | |
// 跳转完成后,将滚动条位置重置 | |
router.afterEach(to => { | |
window.scrollTo(0, 0); | |
}); | |
export default router; |
vue-router4x 相对于 vue-router3x 除了新增了组合式 API 以外,还删除或变动了不少地方。
单独列出来变动点太杂乱。这里系统性的把项目中经常能用到的知识点进行整理.
在 UnoCSS 的官网首页,已经为我们展示了它的优点
如上已经说的很全面了,UnoCSS 的设计理念是简洁易用,提供了一套直观和易于记忆的类名,使得开发人员能够快速编写和理解样式代码。它遵循类似于 Tailwind CSS 的风格,使用直观的命名规则来描述样式的作用。而且 Antfu 大佬也是 Tailwind 的作者之一。
ESLint 从 v8.53.0 起,将弃用代码风格相关规则,代码风格校验应该交由
Prettier
处理,如果你不喜欢Prettier
,那么要注意尽量使用 v8.50.0 之前的版本。
本文不谈代码风格的那些规则,只提及可以提高代码质量、减少运行时出错的的规则。
"off"
or 0
- 关闭规则"warn"
or 1
- 将规则视为一个警告(不会导致程序退出)"error"
or 2
- 将规则视为一个错误 (当被触发的时候,程序会退出)