@ distilled. cloud/ astro (英语)
程序化,无扳手的Astro集成.
此软件包执行框架核心 Framework astro 服务 -
效果 build编号 :dev astro公共方案 API(import { build, dev } from "astro"充满记忆 AstroInlineConfig (无)
astro.config.*——并采用 作为值部署目标云层
工人目标(一叉) @astrojs/cloudflare 结束
@distilled.cloud/cloudflare-vite-plugin,没有扳手依赖和没有
wrangler.json (在任何地方) ./cloudflare 子路径.
import * as Astro from "@distilled.cloud/astro";
import cloudflare from "@distilled.cloud/astro/cloudflare";
const layer = Astro.make({
target: cloudflare({
worker: {
compatibilityDate: "2026-03-10",
compatibilityFlags: ["nodejs_compat"],
worker: {
name: "my-app",
bindings: [
/* in-memory bindings */
],
},
},
}),
astro: { site: "https://example.com" },
});
// layer: Layer<Framework> — Framework.build → BuildOutput, Framework.dev → { url }
结构:框架一半x部署-目标一半
一揽子方案将两个关切问题分开(见 packages/framework-core/README.md, (中文(简体) ),
"建筑:框架×部署目标",为完整的学说:
| 半数 | 模块 | 目录 |
|---|---|---|
| 框架(平台中立) | src/index.ts, (中文(简体) ), src/Astro.ts, (中文(简体) ), src/Target.ts, (中文(简体) ), src/environments.ts | 这个 Framework 服务执行:内置配置合成(makeAstroInlineConfig),方案 build()编号 :dev() 共享建设-产出收集器(entryEnvironment: "ssr", (中文(简体) ), skipEnvironments: ["astro", "prerender"]),部署目标解析. 零云层进口 由 test/decoupling.test.ts。 。 。 . |
| 云浮目标 | src/cloudflare.ts (传教士) @distilled.cloud/astro/cloudflare, (中文(简体) ), src/integration.ts, (中文(简体) ), src/config-plugin.ts, (中文(简体) ), src/prerenderer.ts, (中文(简体) ), src/prerender-environment.ts, (中文(简体) ), src/prerender-middleware.ts, (中文(简体) ), src/runtime/** | 这个 AstroTarget 工厂加一切 Cloudflare: 堡垒 @astrojs/cloudflare 在我们的vite插件、销售商的运行时间入口、 virtual:astro-cloudflare:config 插件, 工人预手( 建边驱动程序) __astro_* youtflare-runtime上的协议),dev节点前置中间软件插件. |
| 炼金术源提供者 | src/source.ts (传教士) @distilled.cloud/astro/source(中文(简体) ) | 炼金术 Cloudflare.Workers 源模块(结构 SourceProvider 镜像 : build编号 :hash编号 :dev 用于炼金工人资源。 Cloudflare在定义上具有特异性;直接构建Cloudflare目标. |
未来的平台(如AWS)是一个新的子路径,执行相同的
AstroTarget 组合——框架的一半或框架核心不变.
这个 AstroTarget 合同
AstroTarget 扩展框架核心的通用 DeployTarget 一个
特定框架钩:
interface AstroTarget<Config = unknown> extends DeployTarget<Config> {
/** The Astro adapter integration pinned into AstroInlineConfig.adapter. */
readonly integration: () => AstroIntegration;
}
所有特定平台都搭乘在集成内部(Astro的适配器)
API 已经是右边的接合器: 它注入 vite 插件, 选择服务器
输入点,并配置构建)。 一般情况 DeployTarget 缝合是
受框架一半的约束:
target.build—— 说 批发大楼收购: 当定义时,Framework.build代表整个生产建设到目标。 (云浮星盘) 目标不定义它——Astro驱动自己的构建. )finish- 施工后结业通行证,通过applyDeployTargetFinish在收集器产生之后BuildOutput(Astro的建筑是用记忆交付的,所以结尾上下文没有 打开磁盘entry) (中文(简体) ).bundle解决/捆绑元数据(conditions, (中文(简体) ),external(b) 资料 用于Astro,因为集成会配置捆绑器本身.serve- 当地服务 已建成 输出; e2e 带的 Cloudflare 目标提供这个(最小值)。 不是HMR的dev路径.
如何通过目标
Astro.make({ target, targetConfig }) 接受一个 DeployTargetInput数字 :
- a 一个
AstroTarget价值 ——用地(全型安全;自建 通过导入目标模块, - (单位:千美元) 工厂
(config) => AstroTarget适用于targetConfig, (中文(简体) ), - (单位:千美元) 模块指定符 字符串——从 项目的
node_modules(数量)default-或名称target- 出口是价值或工厂, 适用于targetConfig。 。 。 .
选择 target 默认为 "@distilled.cloud/astro/cloudflare"这样
已有的 Cloudflare 用户不需要更改 。 目标解决一次
build编号 :dev 操作; 找不到已解决的目标 integration 钩子
键入失败 FrameworkError。 。 。 .
选项
Astro.make(options?: AstroFrameworkOptions)
| 选项 | 类型 | 说明 |
|---|---|---|
target | AstroTargetInput | 部署目标(价值/工厂/规格)。 默认 : "@distilled.cloud/astro/cloudflare"。 。 。 . |
targetConfig | unknown | 配置交给目标工厂/指定装入的模块. 不透明到框架的一半。 未使用时 target 是一个值. |
astro | AstroInlineConfig | 额外 Astro 配置合并为内置内置配置( A)site, (中文(简体) ), base, (中文(简体) ), redirects, (中文(简体) ), integrations, (中文(简体) ), devToolbar, (中文(简体) ), vite(中文(简体) ). root, (中文(简体) ), configFile: false,以及 adapter 被钉住; output 默认为 "server"。 。 。 . |
root | string | 项目根. 默认为 process.cwd()。 。 。 . |
Cloudflare 目标配置cloudflare(config)(中文(简体) )
| 选项 | 类型 | 说明 |
|---|---|---|
worker | CloudflareVitePluginOptions | 兼容性日期/旗帜、工人名称/约束/资产行为、运行时背景——一切a wrangler.json 本来会带着的,记忆. main, (中文(简体) ), viteEnvironmentsAstro的节点环境 skipEnvironments 由整合管理. |
sessionKVBindingName | string | 用于零配置会话的 KV 绑定名称, 在 Worker env 上显示时注入 Astro 的会话配置 。 默认 "SESSION"。 。 。 . |
sessions | boolean | 零配置会话( 默认) true: 无时 session.driver 已经配置, Astro 的 cloudflareKVBinding 驱动程序配置 sessionKVBindingName。 。 。 . false 使会话配置不受影响. |
sessionDevKV | boolean | 在 dev 中, 自动输入一个内嵌的本地 KV 命名空间( E)KvNamespace.local对会议具有约束力(默认) true) (中文(简体) ). 当dev 工人绑定时会禁用已发送带有该名称的 KV 绑定——绑定名称必须是独一无二的. |
上游 @astrojs/cloudflare 此分叉的适配选项 没有 支助
(单位:千美元)imageService, (中文(简体) ), imagesBindingName, (中文(简体) ), platformProxy, (中文(简体) ), configPath, (中文(简体) ),
persistState, (中文(简体) ), auxiliaryWorkers, (中文(简体) ), inspectorPort, (中文(简体) ), viteEnvironment, (中文(简体) ),
cloudflareModules, (中文(简体) ), experimental以明显的错误拒绝
被默默地忽略——每个错误都指代原因和迁移.
E2e-机能使用量
默认导出是牵引框架工厂. 它读取了绳子
云层工人结构选择
(单位:千美元)options.target?.cloudflare?.worker ?? options.vite)并把它们作为
默认目标配置 :
// e2e.config.ts — untyped carriage
export default Options.make({
target: { cloudflare: { worker: { /* ... */ }, preview: { /* miniflare */ } } },
framework: "@distilled.cloud/astro",
});
// e2e.config.ts — typed target value (recommended; see fixtures/astro)
framework: (options) =>
Astro.make({
target: cloudflare({ worker: Options.resolveCloudflareOptions(options).worker }),
astro: { devToolbar: { enabled: false } },
}),
云旗目标会做什么
整合是一个叉子 @astrojs/cloudflare v14.1.3 (上游地区)
以 @cloudflare/vite-plugin + 扳手对等依赖,重修为
{\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}是免费的 @distilled.cloud/cloudflare-vite-plugin数字 :
- 交换插件 .
@cloudflare/vite-plugin我们的插件,main被钉住 供应商服务器入口(@distilled.cloud/astro/entrypoints/server, (中文(简体) ), 工人环境ssrAstro的节点astro编号 :prerender环境 内skipEnvironmentsDev SSR通过Vite模块在工人内部执行 带有内存绑定的线条env.ASSETS404/资产倒置是 满足于运行时间的 vite-aware 资产回转(Assets.local) (中文(简体) ). - 弃去.
loadWranglerEnv+ 键.dev.vars,wrangler -config文件监视器, 页:1previewEntrypoint(我们的运行时间为建设产出服务) 产出 -wrangler.json补丁. - 工人先发制人(违约,如上游).
prerenderEnvironment: "workerd"构建prerender环境状况 工人(与ssr并且从工人那里为它服务,d 通过cloudflare-runtime——没有Vite预览服务器,没有wrangler——同时 上游驱动器__astro_*对它执行 HTTP 协议 (单位:千美元)src/prerenderer.ts) (中文(简体) ). 制作运行时间的预发页面 : 顶级cloudflare:workers进口和配置的工人捆绑 工作的时间.prerenderEnvironment: "node"倒计时 Astro 的股票节点预置器( + dev 节点预置器) 插件),用于构建时需要仅节点API的页面. - 铁丝网. 这个
passthrough图像服务(参见限制). - 取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取. 运行时间进入点/ 手动/ 帮助( 验证为免费)
缩写
@cloudflare/vite-plugin进口——由“复仇者”执行 运行时间纯度测试)virtual:astro-cloudflare:config插件( 非) 导出于上游)optimizeDeps.include环境插件cf-imports编号 :cf-externals插件,以及astro:build:setup服务器 微调( t)ssr.noExternal, (中文(简体) ),sharp外部,进程-env横幅). - 固定(建设-产出均等). 这个
astro:build:done通过镜像 上游:_redirects由 Astro 重定向路由生成( 配置)redirects+ 重定向路由文件,通过@astrojs/underscore-redirects这样 静态/前置重定向由资产层在 劳动者;_headers获得不可改变的Cache-Control: public, max-age=31536000, immutable散列的规则_astro/资产目录( 当用户在_headers已经设置 匹配规则的缓存控制, 或是何时build.assetsPrefix积分资产 (b) 在另一来源;injectTypes安装App.Locals运行时间类型 (单位:千美元)@distilled.cloud/astro/types.d.ts) (中文(简体) ). - 保留( P)
base !== "/") (中文(简体) ). 客户端在基地下面筑巢 资产目录服务于 URL 根, 特殊文件 (单位:千美元).assetsignore编号 :_headers编号 :_redirects)被移回上,并且 目标finish过分BuildOutput.clientDirectory回到过去 原始目录( 上游排放的当量) (原始内容存档于2018-09-26). wrangler.jsonassets.directory补丁). - 会话( 0- 配置) . 上游镜像: 没有配置
session.driver阿斯特罗的cloudflareKVBinding已配置驱动程序 反对:sessionKVBindingName装订( a)SESSION; 供应商 运行时处理器从每个管道的工人内装入活的 KV 请求。 在Dev,一个记忆KvNamespace.local命名空间是自动添加的 对工人的束缚Astro.session零设置工作( 损坏) 通过sessionDevKV: false当你的编织物已经携带 (b) 约束。 在生产过程中,工人必须使用名为KV的装订装置sessionKVBindingName(带有炼金术: 给工人一个 KV 命名空间) 绑定名称SESSION) (中文(简体) ). astro:env在建设时间. 炼金术源提供者 (单位:千美元)@distilled.cloud/astro/source) 输入工人的字面内涵值 (弦声,Redacted字符串、 数字/ 布尔等process.env在此之前build编号 :dev这样astro:env配置加载时服务器机密解析并 节点先发制人——上游角色loadWranglerEnv(叫声)vars.dev.vars) 剧作.
- Typegen后卫.
build编号 :sync运行 Astro 的型号代号, 哪个靴子 a 临时 vite 服务器; 集成条configureServer从 云花板插件在这些阶段(在上游迷雾),所以从不工作 靴子中建——我们的干燥环境退化为可跑的根茎,a 支持dev插件的合同 .
构建输出
Framework.build 返回时 BuildOutput 合同内容:
serverModules (首先进入—— ssr 条目块 server/entry.mjs, (中文(简体) ),
重新从磁盘读取,因为 Astro 输入了序列化的 SSR 显示于
捆绑完成)和 clientDirectory (单位:千美元)dist/client被俘虏的路
预发 HTML 在 vite 构建 骑行之后写成 - 包括
生成 _redirects 财务报告和审定财务报表 _headers 文档). 没有 wrangler.json,没有
.wrangler/ 目录,任何地方.
限制
- 节点前倒置会失去工人API. 与
prerenderEnvironment: "node",预留路线 (单位:千美元)export const prerender = true在Astro的股票中执行 节点 ưμ㼯acloudflare:workers(或其他情况) 依靠工人独占的API)在事前交接时间将无法在事前交接. 默认"workerd"模式没有此空格 – 预调运行在 工人使用附着的工人捆绑物. - 图像服务是传递. 工人不能运行锐利
IMAGES绑定在我们的运行时间中是远程的,所以集成硬线Astro的passthrough图像服务: 图像作为- is 服务( 没有调整大小 /) 格式谈判)。 生产终点是卖家image-passthrough-endpoint; dev使用Astro的通用节点终点. - 会话需要在生产中装入已部署的 KV 绑定. 零配置会话
在 Dev (模拟本地 KV) 中工作并配置已建的应用程序
读取
sessionKVBindingNameKV 装订自工人舱内,但 提供已部署的工人的KV命名空间是部署 工具的工作。 没有它,会话操作在运行时间会失败. astro preview未使用. 上游预览硬接点 。服务构建的输出是部署目标的serve关注(e2e带中的最小值;炼金术 dev环路用途) 云浮-运行时间.- 版本针入. Astro的JS API是: Astro的JS API是:
@experimental和一体化 内部(虚拟模块名称、适配器特性)采用Astro版本 专业。 分叉轨道astro7.x /适配器 v14.1.3; 处理版本起伏 由固定的e2e套房作为后盾.
测试
bun run test- 单位测试(test/Astro.test.ts: 目标模块,配置 合成、集成接钩、批发-建设授权;test/parity.test.ts: 届会,_redirects编号 :_headers世代相传,base !== "/"处理,injectTypes,不支持选项的守护者,内 供餐;test/decoupling.test.ts:框架的一半无云层 保证和运行时间纯洁.fixtures/astro- 剧作家e2e套房 驾驶一个真正的应用程序通过 双向带dev(工人舱驾驶员)和live(轻而易举) 已建出输出)模式: SSR + 绑定,中件本地/标题,配置 重定向(从生成的_redirects在直播模式下,Astro.session往返,永久资产Cache-ControlJSON/二进制 终点、内容收藏、预发页、公共资产、ASSETS 404倒计时. (单位:千美元) A 类base !== "/"fixture app还不是套房的一部分—— 行为经过单位测试test/parity.test.ts. ) (中文(简体) )