资产 Assets

Public assets

Nitro 通过 public/ 目录处理资产。 public/ 目录中的所有资产都将自动提供。这意味着您可以直接从浏览器访问它们,而无需任何特殊配置。

md
public/
  image.png     <-- /image.png
  video.mp4     <-- /video.mp4
  robots.txt    <-- /robots.txt
package.json
nitro.config.ts

Production public assets

构建 Nitro 应用程序时,public/目录将被复制到.output/public/,并且将创建包含元数据的清单并将其嵌入到服务器包中。

json
{
  "/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 无需扫描目录即可了解公共资产,从而通过缓存标头提供高性能。

Server assets

assets/ 目录中的所有资产都将添加到服务器包中。构建应用程序后,您可以在 .output/server/chunks/raw/ 目录中找到它们。请注意资产的大小,因为它们将与服务器包捆绑在一起。

可以使用 存储层 通过 assets:server 挂载点来寻址它们。

例如,您可以将 json 文件存储在 assets/data.json 中并在处理程序中检索它:

js
export default defineEventHandler(async () => {
  const data = await useStorage('assets:server').getItem(`data.json`)
  return data
})

Custom server assets

为了从自定义目录添加资产,您需要在 nitro 配置中定义一个路径。这样您就可以从“assets/”目录之外的目录添加资产。

js
nitro.config.ts
js
export default defineNitroConfig({
  serverAssets: [{
    baseName: 'my_directory',
    dir: './my_directory'
  }]
})

例如,您可能想要添加一个包含 html 模板的目录。

js
nitro.config.ts
js
export default defineNitroConfig({
  serverAssets: [{
    baseName: 'templates',
    dir: './templates'
  }]
})

然后您可以使用assets:templates基础来检索您的资产。

handlers/success.ts
ts
export default defineEventHandler(async (event) => {
  return await useStorage('assets:templates').getItem(`success.html`)
})