静态文件服务器
你可以使用 @adonisjs/static 包从给定目录提供静态文件服务。该包附带一个中间件,你必须在服务器中间件堆栈中注册它以拦截 HTTP 请求并提供文件服务。
安装
该包已预配置在 web 入门套件中。但是,你可以使用其他入门套件按如下方式安装和配置它。
使用以下命令安装和配置包:
node ace add @adonisjs/static:::disclosure
使用检测到的包管理器安装
@adonisjs/static包。在
adonisrc.ts文件中注册以下服务提供者。ts{ providers: [ // ...其他提供者 () => import('@adonisjs/static/static_provider') ] }创建
config/static.ts文件。在
start/kernel.ts文件中注册以下中间件。tsserver.use([ () => import('@adonisjs/static/static_middleware') ])
:::
配置
静态中间件的配置存储在 config/static.ts 文件中。
import { defineConfig } from '@adonisjs/static'
const staticServerConfig = defineConfig({
enabled: true,
etag: true,
lastModified: true,
dotFiles: 'ignore',
})
export default staticServerConfigenabled
临时启用或禁用中间件,而无需将其从中间件堆栈中删除。
acceptRanges
Accept-Range头允许浏览器恢复中断的文件下载,而不是尝试重新开始下载。你可以通过将acceptsRanges设置为false来禁用可恢复下载。默认为
true。cacheControl
启用或禁用 Cache-Control 头。当
cacheControl禁用时,immutable和maxAge属性将被忽略。ts{ cacheControl: true }dotFiles
定义如何处理
public目录内点文件的请求。你可以设置以下选项之一。allow:像其他文件一样提供点文件服务。deny:拒绝请求并返回403状态码。ignore:假装文件不存在并返回404状态码。
ts{ dotFiles: 'ignore' }etag
启用或禁用 etag 生成。
ts{ etag: true, }lastModified
启用或禁用 Last-Modified 头。文件 stat.mtime 属性用作头的值。
ts{ lastModified: true, }immutable
启用或禁用
Cache-Control头的 immutable 指令。默认情况下,immutable属性是禁用的。如果启用
immutable属性,你必须定义maxAge属性以启用缓存。ts{ immutable: true }maxAge
定义
Cache-Control头的 max-age 指令。值应该是毫秒或时间表达式字符串。ts{ maxAge: '30 mins' }headers
一个返回要在响应上设置的头对象的函数。该函数接收文件路径作为第一个参数,文件统计信息对象作为第二个参数。
ts{ headers: (path, stats) => { if (path.endsWith('.mc2')) { return { 'content-type': 'application/octet-stream' } } } }
提供静态文件服务
注册中间件后,你可以在 public 目录中创建文件,并在浏览器中使用文件路径访问它们。例如,./public/css/style.css 文件可以使用 http://localhost:3333/css/style.css URL 访问。
public 目录中的文件不会使用资产打包器编译或构建。如果你想编译前端资产,你必须将它们放在 resources 目录中并使用资产打包器。
将静态文件复制到生产构建
当你运行 node ace build 命令时,存储在 /public 目录中的静态文件会自动复制到 build 文件夹。
复制 public 文件的规则在 adonisrc.ts 文件中定义。
{
metaFiles: [
{
pattern: 'public/**',
reloadServer: false
}
]
}