SvelteKit 最新中文文档教程(9)—— 部署静态站点与单页应用

news/2025/3/26 15:31:04/文章来源:https://www.cnblogs.com/yayujs/p/18790045

前言

Svelte,一个语法简洁、入门容易,面向未来的前端框架。

从 Svelte 诞生之初,就备受开发者的喜爱,根据统计,从 2019 年到 2024 年,连续 6 年一直是开发者最感兴趣的前端框架 No.1

image.png

Svelte 以其独特的编译时优化机制著称,具有轻量级高性能易上手等特性,非常适合构建轻量级 Web 项目

为了帮助大家学习 Svelte,我同时搭建了 Svelte 最新的中文文档站点。

如果需要进阶学习,也可以入手我的小册《Svelte 开发指南》,语法篇、实战篇、原理篇三大篇章带你系统掌握 Svelte!

欢迎围观我的“网页版朋友圈”、加入“冴羽·成长陪伴社群”,踏上“前端大佬成长之路”。

静态站点生成

要将 SvelteKit 用作静态站点生成器(SSG),请使用 adapter-static

这将把您的整个站点预渲染为静态文件集合。如果您想只预渲染某些页面而动态渲染其他页面,您需要使用不同的适配器,并结合prerender 选项。

使用方法

通过 npm i -D @sveltejs/adapter-static 安装,然后将适配器添加到您的 svelte.config.js 中:

// @errors: 2307
/// file: svelte.config.js
import adapter from '@sveltejs/adapter-static';export default {kit: {adapter: adapter({// 显示默认选项。在某些平台上// 这些选项会自动设置 — 见下文pages: 'build',assets: 'build',fallback: undefined,precompress: false,strict: true})}
};

...并在根布局中添加 prerender 选项:

/// file: src/routes/+layout.js
// 如果您使用 fallback(即 SPA 模式),这可以设为 false
export const prerender = true;

[!NOTE] 您必须确保 SvelteKit 的 trailingSlash 选项适合您的环境。如果您的主机在收到 /a 的请求时不渲染 /a.html,那么您需要在根布局中设置 trailingSlash: 'always' 以创建 /a/index.html

零配置支持

部分平台已支持零配置(未来将支持更多):

  • Vercel

在这些平台上,您应该省略适配器选项,以便 adapter-static 可以提供最佳配置:

// @errors: 2304
/// file: svelte.config.js
export default {kit: {adapter: adapter(---{...}---)}
};

选项

pages

预渲染页面的写入目录。默认为 build

assets

写入静态资源(包括 static 的内容,以及 SvelteKit 生成的客户端 JS 和 CSS)的目录。通常这应该与 pages 相同,它会默认使用 pages 的值,但在极少数情况下,您可能需要将页面和资源输出到不同的位置。

fallback

为 SPA 模式 指定一个后备页面,例如 index.html200.html404.html

precompress

如果为 true,则使用 brotli 和 gzip 预压缩文件。这将生成 .br.gz 文件。

strict

默认情况下,adapter-static 会检查您的应用的所有页面和端点(如果有)是否都已预渲染,或者您是否设置了 fallback 选项。这个检查的存在是为了防止您意外发布一个部分内容无法访问的应用,因为这些内容不包含在最终输出中。如果您知道这是可以的(例如当某个页面只在特定条件下存在时),您可以将 strict 设置为 false 来关闭这个检查。

GitHub Pages

在为 GitHub Pages 构建时,如果您的仓库名称不等同于 your-username.github.io,请确保更新 config.kit.paths.base 以匹配您的仓库名称。这是因为站点将从 https://your-username.github.io/your-repo-name 而不是根目录提供服务。

您还需要生成一个后备 404.html 页面来替换 GitHub Pages 显示的默认 404 页面。

GitHub Pages 的配置可能如下所示:

// @errors: 2307 2322
/// file: svelte.config.js
import adapter from '@sveltejs/adapter-static';/** @type {import('@sveltejs/kit').Config} */
const config = {kit: {adapter: adapter({fallback: '404.html'}),paths: {base: process.argv.includes('dev') ? '' : process.env.BASE_PATH}}
};export default config;

您可以使用 GitHub actions 在进行更改时自动将您的站点部署到 GitHub Pages。以下是一个工作流示例:

### file: .github/workflows/deploy.yml
name: Deploy to GitHub Pageson:push:branches: 'main'jobs:build_site:runs-on: ubuntu-lateststeps:- name: Checkoutuses: actions/checkout@v4# 如果您使用 pnpm,添加此步骤然后更改下面的命令和缓存键以使用 `pnpm`# - name: Install pnpm#   uses: pnpm/action-setup@v3#   with:#     version: 8- name: Install Node.jsuses: actions/setup-node@v4with:node-version: 20cache: npm- name: Install dependenciesrun: npm install- name: buildenv:BASE_PATH: '/${{ github.event.repository.name }}'run: |npm run build- name: Upload Artifactsuses: actions/upload-pages-artifact@v3with:# 这应该与适配器静态选项中的 `pages` 选项匹配path: 'build/'deploy:needs: build_siteruns-on: ubuntu-latestpermissions:pages: writeid-token: writeenvironment:name: github-pagesurl: ${{ steps.deployment.outputs.page_url }}steps:- name: Deployid: deploymentuses: actions/deploy-pages@v4

如果您不使用 GitHub actions 部署您的站点(例如,您将构建的站点推送到它自己的仓库),请在您的 static 目录中添加一个空的 .nojekyll 文件,以防止 Jekyll 干扰。

单页应用

通过在根布局中禁用 SSR,您可以将使用任何适配器的任何 SvelteKit 应用转换为完全客户端渲染的单页应用(SPA):

/// file: src/routes/+layout.js
export const ssr = false;

[!NOTE] 在大多数情况下不推荐这样做:它会损害 SEO,往往会降低感知性能,并且如果 JavaScript 失败或被禁用(这种情况发生的频率可能比您想象的要高),会使您的应用对用户不可访问。

如果您没有任何服务端逻辑(即没有 +page.server.js+layout.server.js+server.js 文件),您可以使用 adapter-static 通过添加一个后备页面来创建您的 SPA。

用法

使用 npm i -D @sveltejs/adapter-static 安装,然后在您的 svelte.config.js 中添加适配器,并使用以下选项:

// @errors: 2307
/// file: svelte.config.js
import adapter from '@sveltejs/adapter-static';export default {kit: {adapter: adapter({fallback: '200.html' // 可能因主机而异})}
};

fallback 页面是 SvelteKit 根据您的页面模板(例如 app.html)创建的 HTML 页面,用于加载您的应用并导航到正确的路由。例如静态网站托管服务 Surge,允许您添加一个 200.html 文件,用于处理任何不对应于静态资源或预渲染页面的请求。

在某些主机上,它可能是 index.html 或完全不同的名称 — 请查阅您的平台文档。

[!NOTE] 请注意,无论 paths.relative 的值如何,后备页面将始终包含绝对资源路径(即以 / 而不是 . 开头),因为它用于响应任意路径的请求。

Apache

要在 Apache 上运行 SPA,您应该添加一个 static/.htaccess 文件,将请求路由到后备页面:

<IfModule mod_rewrite.c>RewriteEngine OnRewriteBase /RewriteRule ^200\.html$ - [L]RewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-dRewriteRule . /200.html [L]
</IfModule>

预渲染单个页面

如果您想预渲染特定页面,您可以仅对应用的这些部分重新启用 ssrprerender

/// file: src/routes/my-prerendered-page/+page.js
export const prerender = true;
export const ssr = true;

Svelte 中文文档

点击查看中文文档:

  • SvelteKit Node 服务端
  • SvelteKit 单页应用

系统学习 Svelte,欢迎入手小册《Svelte 开发指南》。语法篇、实战篇、原理篇三大篇章带你系统掌握 Svelte!

此外我还写过 JavaScript 系列、TypeScript 系列、React 系列、Next.js 系列、冴羽答读者问等 14 个系列文章, 全系列文章目录:https://github.com/mqyqingfeng/Blog

欢迎围观我的“网页版朋友圈”、加入“冴羽·成长陪伴社群”,踏上“前端大佬成长之路”。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/904939.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FeedbackStream:8 分钟创建 AI 面试智能体;Moshi 开源图像理解实时语音模型 MoshiVis 丨日报

开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的 技术 」、「有亮点的 产品 」、「有思考的 文章 」、「有态度的 观点 」、「有看点的 活动 」,但内容仅代表编辑…

20234120 2024-2025-2 《Python程序设计》实验一报告

20234120 2024-2025-2 《Python程序设计》实验一报告 课程:《Python程序设计》 班级: 2341 姓名: 李卓颖 学号:20234120 实验教师:王志强老师 实验日期:2025年3月22日 必修/选修:专业选修课 一、实验内容 (一)准备工作:1.安装Python和PyCharm:访问Python和PyCharm官…

day:28 postman——断言

一.postman 断言 1.断言再test中 状态码是否等于200: tests["Status code is 200"] = responseCode.code === 200; 断言响应时间小于200ms: tests["Response time is less than 200ms"] = responseTime < 200; 断言响应体包含内容: tests["Bod…

XDA论坛打不开的解决办法

开了梯子反而进不去,关掉全局代理 v2 可以添加两行 https://xdaforums.com/; https://www.xda-developers.com/;

国内首个HR智能体平台:开启人力资源管理智能化征程

在当今数字化飞速发展的浪潮中,人工智能已不再是一个遥远的概念,而是实实在在地渗透到了各个领域,深刻改变着我们的工作与生活方式。人力资源管理,这一关乎企业核心竞争力的关键环节,也正经历着AI技术带来的前所未有的变革。HR智能体作为这一变革中的重要成果,正逐渐成为…

爆火开源库!20K星标,一键让网页设计秒变手绘风

今天必须给大伙说说一个超有意思的开源库,在GitHub上已经斩获20K星标啦,它能轻松给网页设计加上手绘风格的“滤镜”,让页面瞬间告别千篇一律,充满艺术感!一、Rough.js是什么?这个名为Rough.js轻量级的图形库,大小才8KB,能赋予网页元素自然又独特的手绘质感。通过一套特…

易路iBuilder智能体平台:AI+HR、全场景、深融合,7大创新应用引领HR管理变革

从国产AI大模型DeepSeek发布至今,国内外人工智能的热度持续居高不下。AI Agent(智能体)作为人工智能领域的重要概念与产品形态,也被广泛提起、认识并应用于千行万业中。本文将基于人力资源领域首个AI Agent垂直应用——易路iBuilder智能体平台的创新实践应用,对智能体在人…

Gitee DevOps 实践指南:本土团队效率提升的新范式

在数字化转型的浪潮中,Gitee DevOps 作为国内领先的一体化研发效能平台,通过深度融合代码托管、CI/CD、项目管理等核心功能,为企业提供了本土化的 DevOps 解决方案。一、Gitee DevOps 的核心价值定位 在数字化转型的浪潮中,Gitee DevOps 作为国内领先的一体化研发效能平台,…

那些正常的动态规划

目录前言动态规划到底是啥?线性dp最长上升子序列子集和子序列和子串的区别内容分析最大上升子序列例题1——[NOIP2004 提高组] 合唱队形分析最长公共子序列最长公共子串平面dp例题2——[NOIP2000 提高组] 方格取数分析例题3——[NOIP2008 提高组] 传纸条分析例题4——最大加权…

3月24日刷题笔记-第六章 流量特征分析-常见攻击事件 tomcat

1、在web服务器上发现的可疑活动,流量分析会显示很多请求,这表明存在恶意的扫描行为,通过分析扫描的行为后提交攻击者IP flag格式:flag{ip},如:flag 我们查看流量包,可以发现有一个外部IP在对常见端口进行SYN扫描,判断出为恶意IPflag{14.0.0.120} 2、找到攻击者IP后请通过…