静态文件服务器
你可以使用 @adonisjs/static 包从给定目录提供静态文件。该包附带一个中间件,你必须将其注册到服务端中间件栈 中以拦截 HTTP 请求并提供文件。
安装
该包已预配置在 web 启动套件中。不过,你可以像下面这样在其他启动套件中安装并配置它。
使用以下命令安装并配置该包:
node ace add @adonisjs/static
-
使用检测到的包管理器安装
@adonisjs/static包。 -
在
adonisrc.ts文件中注册以下 service provider。{providers: [// ...其他 providers() => import('@adonisjs/static/static_provider')]} -
创建
config/static.ts文件。 -
在
start/kernel.ts文件中注册以下中间件。server.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 staticServerConfig
-
enabled
-
在不从中间件栈中移除中间件的情况下,临时启用或禁用它。
-
acceptRanges
-
Accept-Range头允许浏览器恢复被中断的文件下载,而不是尝试重新下载。你可以通过将acceptsRanges设为false来禁用可恢复下载。默认为
true。 -
cacheControl
-
启用或禁用 Cache-Control 头。当
cacheControl被禁用时,immutable和maxAge属性将被忽略。{cacheControl: true} -
dotFiles
-
定义如何处理对
public目录中点文件(dot file)的请求。你可以设置以下选项之一。allow:像其他文件一样提供点文件。deny:以403状态码拒绝请求。ignore:假装文件不存在,并以404状态码响应。
{dotFiles: 'ignore'} -
etag
-
启用或禁用 etag 的生成。
{etag: true,} -
lastModified
-
启用或禁用 Last-Modified 头。文件的 stat.mtime 属性被用作该头的值。
{lastModified: true,} -
immutable
-
为
Cache-Control头启用或禁用 immutable 指令。默认情况下,immutable属性是禁用的。如果启用了
immutable属性,你必须定义maxAge属性才能启用缓存。{immutable: true} -
maxAge
-
定义
Cache-Control头的 max-age 指令。该值应以毫秒为单位,或是一个时间表达式字符串。{maxAge: '30 mins'} -
headers
-
一个返回要在响应上设置的头对象的函数。该函数接收文件路径作为第一个参数,文件状态 对象作为第二个参数。
{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 目录中,并使用资源打包器。
将静态文件复制到生产构建
存储在 /public 目录中的静态文件会在你运行 node ace build 命令时自动复制到 build 文件夹。
复制公共文件的规则定义在 adonisrc.ts 文件中。
{
metaFiles: [
{
pattern: 'public/**',
reloadServer: false
}
]
}