构建和部署
Netlify
在 GitHub 上编辑此页面要部署到 Netlify,请使用 adapter-netlify
。
当你使用 adapter-auto
时,此适配器将默认安装,但将其添加到你的项目中允许你指定特定于 Netlify 的选项。
用法永久链接
使用 npm i -D @sveltejs/adapter-netlify
安装,然后将适配器添加到你的 svelte.config.js
ts
importCannot find module '@sveltejs/adapter-netlify' or its corresponding type declarations.2307Cannot find module '@sveltejs/adapter-netlify' or its corresponding type declarations.adapter from'@sveltejs/adapter-netlify' ;export default {kit : {// default options are shownadapter :adapter ({// if true, will create a Netlify Edge Function rather// than using standard Node-based functionsedge : false,// if true, will split your app into multiple functions// instead of creating a single one for the entire app.// if `edge` is true, this option cannot be usedsplit : false})}};
然后,确保你在项目根目录中有一个 netlify.toml 文件。这将根据 build.publish
设置确定静态资源的写入位置,如下面的示例配置所示
[build]
command = "npm run build"
publish = "build"
如果 netlify.toml
文件或 build.publish
值缺失,将使用默认值 "build"
。请注意,如果你在 Netlify UI 中将发布目录设置为了其他内容,那么你也需要在 netlify.toml
中进行设置,或使用默认值 "build"
。
Node 版本永久链接
新项目将默认使用当前 Node LTS 版本。但是,如果你要升级一个你很久之前创建的项目,它可能停留在较旧的版本上。请参阅 Netlify 文档,了解有关手动指定当前 Node 版本的详细信息。
Netlify Edge 函数永久链接
SvelteKit 支持 Netlify Edge 函数。如果你将选项 edge: true
传递给 adapter
函数,服务器端渲染将在部署在接近网站访问者的基于 Deno 的 edge 函数中发生。如果设置为 false
(默认值),网站将部署到基于 Node 的 Netlify 函数。
ts
importCannot find module '@sveltejs/adapter-netlify' or its corresponding type declarations.2307Cannot find module '@sveltejs/adapter-netlify' or its corresponding type declarations.adapter from'@sveltejs/adapter-netlify' ;export default {kit : {adapter :adapter ({// will create a Netlify Edge Function using Deno-based// rather than using standard Node-based functionsedge : true})}};
Netlify SvelteKit 功能的替代方案永久链接
你可以使用 SvelteKit 直接提供的功能来构建你的应用,而不依赖于任何 Netlify 功能。使用 SvelteKit 版本的这些功能将允许它们在开发模式下使用,通过集成测试进行测试,并且在将来决定从 Netlify 切换时与其他适配器一起使用。但是,在某些情况下,你可能会发现使用 Netlify 版本的这些功能很有用。一个例子是,如果你正在将一个已经托管在 Netlify 上的应用迁移到 SvelteKit。
重定向规则永久链接
在编译期间,重定向规则会自动附加到您的 _redirects
文件中。(如果该文件不存在,则会创建。)这意味着
netlify.toml
中的[[redirects]]
永远不会匹配,因为_redirects
具有 更高的优先级。因此,请始终将您的规则放入_redirects
文件 中。_redirects
不应有任何自定义“全部捕获”规则,例如/* /foobar/:splat
。否则,自动附加的规则将永远不会应用,因为 Netlify 仅处理 第一个匹配的规则。
Netlify 表单永久链接
- 按照 此处的说明创建您的 Netlify HTML 表单,例如
/routes/contact/+page.svelte
。(别忘了添加隐藏的form-name
输入元素!) - Netlify 的构建机器人会在部署时解析您的 HTML 文件,这意味着您的表单必须以 HTML 形式 预渲染。您可以将
export const prerender = true
添加到您的contact.svelte
中,以仅预渲染该页面,或设置kit.prerender.force: true
选项以预渲染所有页面。 - 如果您的 Netlify 表单具有 自定义成功消息,例如
<form netlify ... action="/success">
,则确保相应的/routes/success/+page.svelte
存在且已预渲染。
Netlify 函数永久链接
使用此适配器,SvelteKit 端点将作为 Netlify 函数 托管。Netlify 函数处理程序具有附加上下文,包括 Netlify Identity 信息。您可以在钩子和 +page.server
或 +layout.server
端点中通过 event.platform.context
字段访问此上下文。当适配器配置中的 edge
属性为 false
时,这些是 无服务器函数,当该属性为 true
时,这些是 边缘函数。
ts
export constParameter 'event' implicitly has an 'any' type.7006Parameter 'event' implicitly has an 'any' type.load = async () => { event constcontext =event .platform .context ;console .log (context ); // shows up in your functions log in the Netlify app};
ts
export constParameter 'event' implicitly has an 'any' type.7006Parameter 'event' implicitly has an 'any' type.load = async () => { event constcontext =event .platform .context ;console .log (context ); // shows up in your functions log in the Netlify app};
此外,您还可以通过为它们创建一个目录并在 netlify.toml
文件中添加配置来添加自己的 Netlify 函数。例如
[build]
command = "npm run build"
publish = "build"
[functions]
directory = "functions"
故障排除永久链接
访问文件系统永久链接
您无法在边缘部署中使用 fs
。
您可以在无服务器部署中使用它,但它无法按预期工作,因为文件不会从您的项目复制到您的部署中。相反,使用 $app/server
中的 read
函数来访问您的文件。read
在边缘部署中不起作用(这可能会在未来发生改变)。
或者,您可以预渲染相关路由。