惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Hacker News - Newest:
Hacker News - Newest: "LLM"
AI
AI
T
Troy Hunt's Blog
GbyAI
GbyAI
H
Hacker News: Front Page
SecWiki News
SecWiki News
V2EX - 技术
V2EX - 技术
A
About on SuperTechFans
人人都是产品经理
人人都是产品经理
Hacker News: Ask HN
Hacker News: Ask HN
S
Secure Thoughts
Last Week in AI
Last Week in AI
MyScale Blog
MyScale Blog
L
LINUX DO - 最新话题
C
CERT Recently Published Vulnerability Notes
C
Cyber Attacks, Cyber Crime and Cyber Security
O
OpenAI News
S
SegmentFault 最新的问题
Y
Y Combinator Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
The Cloudflare Blog
P
Proofpoint News Feed
Engineering at Meta
Engineering at Meta
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
美团技术团队
Google DeepMind News
Google DeepMind News
Simon Willison's Weblog
Simon Willison's Weblog
Know Your Adversary
Know Your Adversary
K
Kaspersky official blog
T
The Exploit Database - CXSecurity.com
S
Securelist
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
B
Blog RSS Feed
L
Lohrmann on Cybersecurity
Spread Privacy
Spread Privacy
博客园 - 司徒正美
Stack Overflow Blog
Stack Overflow Blog
博客园 - Franky
The GitHub Blog
The GitHub Blog
B
Blog
F
Fortinet All Blogs
I
InfoQ
C
Check Point Blog
Webroot Blog
Webroot Blog
博客园 - 叶小钗
P
Privacy International News Feed
Latest news
Latest news
Forbes - Security
Forbes - Security
博客园 - 三生石上(FineUI控件)
N
News | PayPal Newsroom

程沛权 - 养了三只猫

声画共生:黄贯中的摇滚美学宇宙 适用于 Oxlint 与 Oxfmt 的 Oxc 优先工作流 Vue Picture Cropper 发布 1.x 版本 讲一讲背后的设计理念 年终总结:2025 年的一些回顾和 2026 年的一些小规划 Obsidian x 飞牛 NAS:打造免费的跨平台笔记同步与备份方案 适用于 ESLint V9 的现代化扁平化配置 解决 better-sqlite3 连接 SQLite 时报错 Could not locate the bindings file 本色十年 记录一次 ERR_INCOMPLETE_CHUNKED_ENCODING 的问题排查 使用 remark-directive 为 Unifiedjs 提供 Markdown 视频语法的解析 干净的 TypeScript 项目在编译时报错 Cannot find module 'undici-types' 的原因和解决 macOS 基于 Android Studio 修改模拟器 Hosts 给猫儿子的新年礼物 它很喜欢! 年终总结:2023 年的一些回顾和 2024 年的一些小规划 千元预算组装入门 NAS 设备 分享 NAS 的硬件基础知识 我写了一本书《前端工程化:基于 Vue.js 3.0 的设计与实践》 想分享一下它背后的故事 Git的选择性合并操作笔记:合并某个版本或某个提交 年终总结:2022 年的一些回顾和 2023 年的一些小规划 知乎收藏夹助手:自动化将专栏的文章添加到收藏夹 Pinia怎么用?Vue3全局状态的管理工具Pinia教程 每天吃什么?上班带什么饭?程序员教你做菜啦!
用Vite更简单的解决Vue3项目的预渲染问题
chengpeiquan · 2022-06-02 · via 程沛权 - 养了三只猫

之前 Webpack 项目经常会用到预渲染,现在团队都开始用 Vite 了,所以弄一个基于 Vite 的 Vue 3 预渲染 demo 可以参考。

预渲染和静态生成器比较接近,也可以参考我的 SSG 博客vite-ssgvite-plugin-pages 来处理。

不过 Vite 本身对预渲染也提供了原生的支持,简单的预渲染可以自己写写代码来改造实现。

HTML 部分

项目根目录下 index.html 里需要追加至少两条资源注入位置的注释:

注释语句作用是否必须
<!--preload-links-->预加载资源
<!--app-html-->页面内容
<!--title-->SEO 优化:写入标题
<!--description-->SEO 优化:写入描述
<!--keywords-->SEO 优化:写入关键词

并把入口文件改成 entry-client.ts ,原来的 main.ts 会作为客户端和服务端启动时的引用。

完整代码如下(源码:index.html ):

其中除了两条必须的注释语句外,可选的部分见 SEO 优化 。

入口文件

普通项目是使用 src/main.ts 作为入口文件,需要改造成两个入口:

注释语句作用源码
entry-client.ts客户端入口查看源码
entry-server.ts服务端入口查看源码

而原来的 main.ts 只作为入口函数导出,详见源码: main.ts

路由

不再需要手动配置路由结构了,改造后直接读取 src/views 的路由组件来生成页面路由。

详见源码: router

SEO 优化

做预渲染为的就是做 SEO ,所以需要自己提前配置好 SEO 的 TKD 三大要素,这里我也是放在 src/router 目录下一起管理了。

实现逻辑见 预渲染 部分的说明,这里是以最终每个页面的相对路径来判断要写入的 TKD 信息的。

详见源码: seo

预渲染

scripts/prerender.ts 这个文件是执行预渲染行为,可以按照路由目录的结构渲染为静态 HTML 文件。

运行 npm run generate ,可以把 dist/static 作为静态站点部署。

当然我也封装了 npm run build 一次性编译所有平台( Client / Server / Static )。

详见: package.json 里的 scripts 部分。

常见问题

改造过程中遇到的几个问题:

水合节点不匹配

控制台报错:

警告来自于 hydration.ts ,一般可以无视……

当然也可以了解更多的知识点: understand-and-solve-hydration-errors-in-vue-js

路由跳转

控制台报错:

需要使用 <Suspense /> 标签来包裹路由视图,详见 Suspense