这篇内容是在有道云旧笔记基础上重新整理的 Vue/Vite 工程实践 笔记。原始记录偏碎片化,这里补充了使用场景、阅读顺序和落地时需要注意的边界,方便以后在项目里快速复用。
适用场景 ​
- Vue/Vite 项目中遇到配置、组件封装、构建或运行时问题时,作为排查入口。
- 需要把一次性调试经验沉淀成团队内可复用的前端工程实践。
- 迁移旧项目或升级依赖时,用来对照检查环境变量、插件和组件行为差异。
核心要点 ​
- 正文以代码或命令片段为主,阅读时建议先确认目标问题,再挑选对应片段验证。
- 保留了 2 段可直接参考的代码或命令,主要涉及 javascript,复制前需要按当前项目路径、版本和变量名做调整。
- 涉及命令行操作时,建议先在测试目录或测试环境执行,确认输出符合预期后再应用到生产环境。
有时候会遇到返回上一页并且携参业务,在在这里我们不使用vuex等状态数据管理,只需在router路由守卫中处理即可
- 返回上一页 handleReadmeClick() { this.
$route.params.backCords = { closed: 1 } this.$router.back() } - vue Router
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71# router/index.js 这里解决 push name的时候name不存在的问题
import { createRouter, createWebHashHistory } from 'vue-router';
import setupRouterGuards from './guards';
import basicRoutes from './routes';
export const router = createRouter({
history: createWebHashHistory(),
routes: [...basicRoutes],
strict: true,
scrollBehavior: () => ({ left: 0, top: 0, behavior: 'auto' }),
});
// 保存原始的 push 方法
const originalPush = router.push;
// 重写 push 方法, 侵入式
router.push = function push(location, ...args) {
// 如果是通过 name 跳转,先判断是否存在
if (typeof location === 'object' && location.name) {
if (!router.hasRoute(location.name)) {
return originalPush.call(this, { name: 'NotFound' });
}
}
return originalPush.call(this, location, ...args);
};
// 非侵入式
router.safePush = function (location, ...args) {
if (typeof location === 'object' && location.name) {
if (!this.hasRoute(location.name)) {
return router.push({ name: 'NotFound' });
}
}
return router.push(location, ...args);
};
// 设置路由守卫
setupRouterGuards(router);
export const resetRouter = () => {
const newRouter = router;
router.matcher = newRouter.matcher;
};
export default function initRouter(app) {
app.use(router);
}
# ...
router.beforeEach((to, from, next) => {
// 检查目标路由是否存在
if (to.matched.length === 0) {
return next({ name: 'NotFound' });
}
//! 返回【back,gp】携参处理,新增到query参数中
const {
params: { backCords }
} = from || {}
if (backCords && Object.keys(backCords)?.length) {
for (const iterator in backCords) {
to.query[iterator] = backCords[iterator]
}
}
# ...
}); - 上一页 // 接受返回是添加的参数(methods,mounted、created周期中) const { closed } = this.$route.query
实践检查清单 ​
- 先确认 Vue、Vite、Node、包管理器版本,再判断示例是否需要按当前工程结构调整。
- 涉及构建或插件配置时,建议同时验证开发环境和生产构建结果。
- 涉及 UI 或浏览器行为时,至少在桌面端和移动端各验证一次关键路径。
复盘小结 ​
这篇笔记更适合作为问题排查或方案落地前的速查材料。后续如果在真实项目中再次遇到同类问题,可以继续把具体版本、报错信息、最终取舍和验证结果补到对应小节里,让它从代码片段逐步沉淀成完整方案。