资源

公共资源

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 挂载点使用存储层进行访问。

例如,你可以在 assets/data.json 中存储一个 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;
});