资源
公共资产
Nitro 通过 server/public/ 目录处理资产。
server/public/ 目录中的所有资产都将自动提供服务。这意味着您可以直接从浏览器访问它们,无需任何特殊配置。
server/
public/
image.png <-- /image.png
video.mp4 <-- /video.mp4
robots.txt <-- /robots.txt
package.json
nitro.config.ts
生产公共资产
构建 Nitro 应用程序时,server/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 无需扫描目录即可了解公共资产,从而通过缓存头提供高性能。
服务器资产
server/assets/ 目录中的所有资产都将添加到服务器捆绑包中。构建应用程序后,您可以在 .output/server/chunks/raw/ 目录中找到它们。请注意资产的大小,因为它们将与服务器捆绑包捆绑在一起。
它们可以使用 存储层 通过 assets:server 挂载点进行寻址。
例如,您可以将一个 JSON 文件存储在 server/assets/data.json 中,并在处理程序中检索它:
export default defineEventHandler(async () => {
const data = await useStorage('assets:server').getItem(`data.json`)
return data
})
自定义服务器资产
要从自定义目录添加资产,您需要在 Nitro 配置中定义一个路径。这允许您从 server/assets/ 目录之外的目录添加资产。
export default defineNitroConfig({
serverAssets: [{
baseName: 'my_directory',
dir: './my_directory' // 相对于 `srcDir`
}]
})
export default defineNuxtConfig({
nitro: {
serverAssets: [{
baseName: 'my_directory',
dir: './my_directory' // Relative to Nitro `srcDir`
}]
}
})
例如,您可能希望添加一个包含 HTML 模板的目录 (server/templates/)。
export default defineNitroConfig({
serverAssets: [{
baseName: 'templates',
dir: './templates' // 相对于 `srcDir`
}]
})
export default defineNuxtConfig({
nitro: {
serverAssets: [{
baseName: 'templates',
dir: './templates' // Relative to Nitro `srcDir`
}]
}
})
然后您可以使用 assets:templates 基本路径来检索您的资产。
handlers/success.ts
export default defineEventHandler(async (event) => {
const html = await useStorage('assets:templates').getItem(`success.html`)
return html
})