静态文件服务器
你可以使用 @adonisjs/static
包从指定目录提供静态文件服务。该包附带了一个中间件,你必须在 服务器中间件堆栈 中注册它,以便拦截 HTTP 请求并提供文件服务。
安装
该包在 web
启动套件中已预配置。但是,你可以按照以下步骤在其他启动套件中安装和配置它。
使用以下命令安装和配置该包:
node ace add @adonisjs/static
-
使用检测到的包管理器安装
@adonisjs/static
包。 -
在
adonisrc.ts
文件中注册以下服务提供者。{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
-
临时启用或禁用中间件,而不从中间件堆栈中移除它。
-
acceptRange
-
Accept-Range
头允许浏览器恢复中断的文件下载,而不是尝试重新开始下载。通过将acceptsRanges
设置为false
,可以禁用可恢复下载。默认为
true
。 -
cacheControl
-
启用或禁用 Cache-Control 头。当
cacheControl
被禁用时,将忽略immutable
和maxAge
属性。{cacheControl: true} -
dotFiles
-
定义如何处理
public
目录中对点文件的请求。你可以设置以下选项之一。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
目录中创建文件,并通过浏览器使用文件路径访问它们。例如,可以通过 http://localhost:3333/css/style.css
URL 访问 ./public/css/style.css
文件。
public
目录中的文件不会使用资源打包工具进行编译或构建。如果你想编译前端资源,必须将它们放置在 resources
目录中,并使用 资源打包工具。
将静态文件复制到生产构建中
运行 node ace build
命令时,存储在 /public
目录中的静态文件会自动复制到 build
文件夹中。
复制公共文件的规则在 adonisrc.ts
文件中定义。
{
metaFiles: [
{
pattern: 'public/**',
reloadServer: false
}
]
}