资源
公共资源
Nitro 通过 public/ 目录管理资源。
Nitro v3 Alpha 文档仍在开发中 —— 可能存在更新、不完善之处以及偶尔的错误。
public/ 目录下的所有资源都会被自动提供服务。这意味着你可以直接通过浏览器访问它们,无需任何特殊配置。
public/
image.png <-- /image.png
video.mp4 <-- /video.mp4
robots.txt <-- /robots.txt
生产环境公共资源
构建 Nitro 应用时,public/ 目录会被复制到 .output/public/,同时会创建包含元数据的清单并嵌入到服务器包中。
{
"/image.png": {
"type": "image/png",
"etag": "\"4a0c-6utWq0Kbk5OqDmksYCa9XV8irnM\"",
"mtime": "2023-03-04T21:39:45.086Z",
"size": 18956
},
"/robots.txt": {
"type": "text/plain; charset=utf-8",
"etag": "\"8-hMqyDrA8fJ0R904zgEPs3L55Jls\"",
"mtime": "2023-03-04T21:39:45.086Z",
"size": 8
},
"/video.mp4": {
"type": "video/mp4",
"etag": "\"9b943-4UwfQXKUjPCesGPr6J5j7GzNYGU\"",
"mtime": "2023-03-04T21:39:45.085Z",
"size": 637251
}
}
这使得 Nitro 无需扫描目录也能识别公共资源,从而通过缓存头实现高性能。
服务器资源
assets/ 目录下的所有资源都会被添加到服务器包中。构建完成后,你可以在 .output/server/chunks/raw/ 目录找到它们。请注意资源的大小,因为它们会与服务器包一同打包。
除非使用
useStorage(),否则资源不会包含在服务器包中。这些资源可以通过使用 存储层 的 assets:server 挂载点访问。
例如,你可以将一个 json 文件存放在 assets/data.json,并在你的处理器中这样获取它:
import { defineHandler } from "nitro/h3";
export default defineHandler(async () => {
const data = await useStorage("assets:server").get("data.json");
return data;
});
自定义服务器资源
若要添加来自自定义目录的资源,你需要在 Nitro 配置中定义路径。这允许你添加位于 assets/ 目录之外的目录中的资源。
nitro.config.ts
import { defineNitroConfig } from "nitro/config";
export default defineNitroConfig({
serverAssets: [{
baseName: 'my_directory',
dir: './my_directory'
}]
})
举例来说,你可能想添加一个包含 HTML 模板的目录。
nitro.config.ts
import { defineNitroConfig } from "nitro/config";
export default defineNitroConfig({
serverAssets: [{
baseName: 'templates',
dir: './templates'
}]
})
然后你可以使用 assets:templates 基础路径来访问你的资源。
handlers/success.ts
import { defineHandler } from "nitro/h3";
export default defineHandler(async (event) => {
const html = await useStorage("assets:templates").get("success.html");
return html;
});