
# 资源

> 配置公共资源和服务器资源的提供与打包方式。

::note
本页所有示例都假设已在 `nitro.config.ts` 中导入以下内容：

```ts
import { defineConfig } from "nitro";
```
::

### `serveStatic`

- 类型：`boolean`{lang=ts} | `'node'`{lang=ts} | `'inline'`{lang=ts}
- 默认值：取决于所用的部署预设。

在生产环境中提供 `public/` 资源。

**注意：** 强烈建议改由边缘 CDN（Nginx、Apache、Cloud）提供 `.output/public/` 目录，以启用压缩和更高级别的缓存。

```ts
export default defineConfig({
  serveStatic: "node", // serve static assets using Node.js
});
```

### `noPublicDir`

- 默认值：`false`{lang=ts}

启用后不会创建 `.output/public` 目录，也会跳过 `public/` 目录复制并禁用预渲染。

```ts
export default defineConfig({
  noPublicDir: true, // skip public directory output
});
```

### `publicAssets`

开发模式下提供、生产环境下打包的公共资源目录。

检测到 `public/` 目录时会默认将其添加到列表中，你也可以自行添加其他目录。

可以使用 `maxAge` 选项为资源设置 Cache-Control 响应头：

```ts
export default defineConfig({
  publicAssets: [
    {
      baseURL: "images",
      dir: "public/images",
      maxAge: 60 * 60 * 24 * 7, // 7 days
    },
  ],
});
```

上述配置会为 `public/images/` 目录下的资源生成以下响应头：

`cache-control: public, max-age=604800, immutable`

`dir` 选项指定文件在文件系统中的位置；`baseURL` 选项指定这些文件在提供或打包后可访问的目录。

:read-more{to="/docs/assets"}

### `compressPublicAssets`

- 类型：`boolean`{lang=ts} | `{ gzip?: boolean, brotli?: boolean, zstd?: boolean }`{lang=ts}
- 默认值：`false`{lang=ts}

启用后，Nitro 会将公共目录中受支持类型且大于 1024 字节的资源和预渲染路由预先压缩为 gzip、brotli 和/或 zstd 格式。压缩级别使用默认值。借助此选项，无需 CDN 也能以零运行时开销提供压缩资源。

在开发模式下，受支持类型的公共资源会按启用的 gzip 和/或 brotli 编码即时压缩。

```ts
export default defineConfig({
  compressPublicAssets: {
    gzip: true,
    brotli: true, // enable gzip and brotli pre-compression
  },
});
```

### `serverAssets`

可在服务器逻辑中访问并在生产环境构建时打包的资源。

```ts
export default defineConfig({
  serverAssets: [
    {
      baseName: "templates",
      dir: "./templates", // bundle templates/ as server assets
    },
  ],
});
```

:read-more{to="/docs/assets#server-assets"}
