新闻详情

新闻详情

首页 / 资讯中心 / 详情

EmDash 站点配置完全指南:从 astro.config.mjs 到部署、类型生成与反向代理

发布时间:2026/11/7 4:29:48来源:尧图网络
EmDash 站点配置完全指南:从 astro.config.mjs 到部署、类型生成与反向代理
CMS后端前端插件系统【免费下载链接】emdashEmDash is a full-stack TypeScript CMS based on Astro; the spiritual successor to WordPress项目地址https://gitcode.com/gh_mirrors/emdas/emdash点击查看免费下载本文以 EmDash基于 Astro 的 TypeScript 全栈 CMS官方技能文档中的配置参考为核心系统讲解站点配置的全部关键环节astro.config.mjs中的 Node.js / Cloudflare 两套部署配置、反向代理与siteUrl的正确设置、live.config.ts的内容集合注册、emdash-env.d.ts类型生成以及开发服务器的启动流程。读完本文你将能独立把一个 EmDash 站点从零配置到可运行并理解每个配置项背后的源码实现原理。配置文件全景一个 EmDash 站点由哪些文件组成根据templates/portfolio-cloudflare模板的实际结构一个 EmDash 站点通常包含以下关键文件my-site/ ├── astro.config.mjs # Astro 配置注册 emdash() 集成 ├── src/ │ ├── live.config.ts # EmDash 内容加载器注册样板代码 │ ├── pages/ # Astro 页面全部服务端渲染 │ ├── layouts/ # 布局组件 │ └── components/ # 可复用组件 ├── seed/ │ └── seed.json # 数据库 schema 演示内容 ├── emdash-env.d.ts # 生成的内容类型由 emdash types 生成 └── package.json其中astro.config.mjs是配置的核心入口live.config.ts与emdash-env.d.ts则是连接 Astro 与 EmDash 运行时的桥梁。下面逐一深入。astro.config.mjs两套部署形态的集成配置EmDash 以 Astro 集成integration的形式接入站点通过emdash()传入数据库与存储适配器描述。根据部署目标的不同配置分为 Node.js 与 Cloudflare 两套形态。Node.js本地开发 / 自托管自托管场景使用astrojs/node适配器、SQLite 数据库与本地文件存储import node from astrojs/node; import react from astrojs/react; import { defineConfig } from astro/config; import emdash, { local } from emdash/astro; import { sqlite } from emdash/db; export default defineConfig({ output: server, adapter: node({ mode: standalone }), image: { layout: constrained, responsiveStyles: true, }, integrations: [ react(), emdash({ database: sqlite({ url: file:./data.db }), storage: local({ directory: ./uploads, baseUrl: /_emdash/api/media/file, }), }), ], devToolbar: { enabled: false }, });各配置项说明output: serverEmDash 内容本质是动态的站点必须服务端渲染SSR。这也是 EmDash 站点的硬性前提——不能用getStaticPaths预渲染 CMS 内容详见 building-emdash-site 技能总览 中的 Common Gotchas。adapter: node({ mode: standalone })使用 Node 独立部署模式适合容器或裸机自托管。database: sqlite({ url: file:./data.db })SQLite 数据库适配器。查看源码 packages/core/src/db/adapters.ts 可知sqlite()返回DatabaseDescriptor内部指向emdash/db/sqlite入口并附带独立的迁移入口emdash/db/sqlite-migrations。该适配器基于node:sqlite要求Node.js 22.16 或更高版本同文件还提供了支持libsql://远程库Turso的LibsqlConfig含authToken。storage: local({...})本地媒体存储适配器。directory指定上传文件落盘目录baseUrl指定媒体文件的公开访问路径/_emdash/api/media/file。对应实现见 packages/core/src/astro/storage/adapters.ts它返回指向emdash/storage/local入口的描述符。image: { layout: constrained, responsiveStyles: true }Astro 图片优化默认行为保证 CMS 中上传的图片能按约束尺寸输出响应式样式。devToolbar: { enabled: false }关闭 Astro 开发工具栏避免与 EmDash 自带管理后台/_emdash/admin冲突。CloudflareD1 R2在 Cloudflare Workers / Pages 上部署时使用astrojs/cloudflare适配器数据库换成 D1、媒体存储换成 R2import cloudflare from astrojs/cloudflare; import react from astrojs/react; import { d1, r2 } from emdash-cms/cloudflare; import { defineConfig } from astro/config; import emdash from emdash/astro; export default defineConfig({ output: server, adapter: cloudflare(), image: { layout: constrained, responsiveStyles: true, }, integrations: [ react(), emdash({ database: d1({ binding: DB, session: auto }), storage: r2({ binding: MEDIA }), }), ], devToolbar: { enabled: false }, });关键差异d1({ binding: DB, session: auto })绑定 Worker 中的 D1 数据库。session: auto表示运行时自动使用 D1 Session API 保证事务一致性——在 packages/cloudflare/src/db 目录下可以看到配套的会话合并coalescing-d1.ts、D1 会话守卫d1-session-guard.ts会话查询超时后自动降级为直连 SELECT等底层实现。r2({ binding: MEDIA })绑定 R2 存储桶作为媒体存储。这个配置与仓库中真实模板templates/portfolio-cloudflare/astro.config.mjs几乎完全一致该模板额外引入了fonts配置加载 Google 字体可以作为直接对照参考。Cloudflare 部署所需的 wrangler.jsonc使用 Cloudflare 形态时还需要一个声明 D1 与 R2 绑定的wrangler.jsonc{ name: my-site, compatibility_date: 2026-02-24, compatibility_flags: [nodejs_compat], assets: { directory: ./dist }, d1_databases: [ { binding: DB, database_name: my-site, }, ], r2_buckets: [ { binding: MEDIA, bucket_name: my-site-media, }, ], }要点说明compatibility_flags: [nodejs_compat]必须开启EmDash 运行时依赖 Node.js 兼容层。assets.directory指向构建产物./dist部署时由wrangler deploy上传。实际模板templates/portfolio-cloudflare/wrangler.jsonc中还展示了worker_loaders沙箱插件需要 Workers 付费计划和triggers.crons维护任务每分钟触发等进阶用法。反向代理与 siteUrlTLS 终止场景的正确配置当站点位于 TLS 终止的反向代理如 Nginx、Caddy、Cloudflare Tunnel之后时Astro.url会返回内部地址如http://localhost:4321而非公网地址如https://mysite.example.com。这会导致 passkey 登录、CSRF 校验、OAuth 回调、重定向等基于 origin 的功能全部失效。配置分两步Step 1声明允许的公共主机。通过 Astro 的security.allowedDomains配置让 Astro 依据X-Forwarded-*请求头重建真实 URL开发环境下还需在vite.server.allowedHosts中声明匹配的主机否则 Vite 会拒绝代理传入的Host头。Step 2显式设置siteUrl。如果重建后的 URL 仍与浏览器地址不一致TLS 终止场景下很常见直接在emdash()中指定emdash({ siteUrl: https://mysite.example.com, // ... });容器化部署时更适合通过环境变量注入EMDASH_SITE_URLhttps://mysite.example.com # or: SITE_URLhttps://mysite.example.comsiteUrl的生效范围覆盖passkey 认证、CSRF origin 匹配、OAuth 重定向、登录重定向、MCP 发现、快照导出、sitemap、robots.txt 与 JSON-LD 结构化数据。它取代了早期只修复 passkey 问题的passkeyPublicOrigin是一个全局的公共站点 URL 配置。从源码看packages/core/src/astro/integration/index.ts 会在构建期校验siteUrl必须是 http/https 协议、无尾随点、无空标签并会规范化为parsed.origin当配置中缺失siteUrl时相关校验如 allowed origins 规则会延迟到运行时执行因为EMDASH_SITE_URL/SITE_URL环境变量可能在构建之后才注入。此外集成还会依据siteUrl的 hostname 注册相关安全规则见同文件第 106-143 行。实用建议当前端有 TLS 终止时通常只需astro dev --host 127.0.0.1仅监听 loopback即可——代理在本地访问开发服务器而siteUrl与浏览器的 HTTPS origin 保持一致无需把 Node 端口暴露到局域网。插件注册在 astro.config.mjs 中挂载扩展EmDash 通过插件体系扩展 CMS 能力hooks、存储、设置、管理后台、API 路由、自定义 Portable Text 块类型。插件同样在astro.config.mjs的emdash()中注册import auditLog from emdash-cms/plugin-audit-log; emdash({ database: sqlite({ url: file:./data.db }), storage: local({ directory: ./uploads, baseUrl: /_emdash/api/media/file }), plugins: [auditLog], }),插件的PluginDescriptor结构id、version、entrypoint、adminEntry、adminPages等定义于 packages/core/src/astro/integration/runtime.ts其中format字段区分standarddefinePlugin风格可进沙箱、可发布到市场与nativecreatePlugin风格仅进程内运行。仓库packages/plugins/下提供了 audit-log、embeds、forms、webhook-notifier 等现成插件可供参考。live.config.ts注册 EmDash 实时内容集合每个 EmDash 站点都必须在src/live.config.ts中写入这段样板代码——它在所有项目中完全一致import { defineLiveCollection } from astro:content; import { emdashLoader } from emdash/runtime; export const collections { _emdash: defineLiveCollection({ loader: emdashLoader() }), };这段代码把 EmDash 的实时内容集合注册给 Astro。注意所有内容类型都通过同一个_emdash集合提供查询具体类型时使用getEmDashCollection(posts)等 API。emdashLoader()的实现位于 packages/core/src/loader.ts它返回一个 LiveLoaderAstro 会通过它与 EmDash 运行时建立实时同步。emdash-env.d.ts自动生成的内容类型声明emdash-env.d.ts在开发服务器启动时自动生成于项目根目录为你的内容集合提供 TypeScript 类型也是tsconfig.json需要 include 的文件。以posts集合为例生成结果形如/// reference typesemdash/locals / import type { PortableTextBlock } from emdash; export interface Post { id: string; slug: string | null; status: string; title: string; featured_image?: { id: string; src?: string; alt?: string; width?: number; height?: number; }; content?: PortableTextBlock[]; excerpt?: string; createdAt: Date; updatedAt: Date; publishedAt: Date | null; } declare module emdash { interface EmDashCollections { posts: Post; } }值得注意的字段语义featured_image是对象而非字符串{ id, src, alt, width, height }渲染时必须使用emdash/ui的Image image{...} /组件直接写img src{post.data.featured_image} /会输出[object Object]。entry.idslug用于 URL与entry.data.id数据库 ULID用于getEntryTerms、Comments 等 API 调用是两回事混用会导致静默空结果。当 schema 变化时开发服务器会自动重新生成此文件也可以手动生成。类型生成emdash types 命令emdash types命令可以从运行中的实例拉取 schema 并生成类型支持三种用法# 从本地开发服务器生成写入项目根目录的 emdash-env.d.ts npx emdash types # 从远程实例生成 npx emdash types --url https://my-site.pages.dev # 自定义输出路径 npx emdash types --output src/types/cms.ts该命令的实现位于 packages/core/src/cli/commands/types.ts通过客户端 APIpackages/core/src/client/index.ts 中 Export full schema as JSON / TypeScript type definitions 相关方法拉取 schema。此外CLI 还会写入.emdash/schema.json存放供工具链消费的原始 schema。package.json关键依赖清单Node.js 站点的核心依赖如下{ dependencies: { astro: ^6.0.0, emdash: workspace:*, astrojs/node: ^9.0.0, astrojs/react: ^4.0.0, react: ^18.0.0, react-dom: ^18.0.0 } }Cloudflare 部署时将astrojs/node替换为astrojs/cloudflare并额外添加emdash-cms/cloudflare提供d1/r2适配器。真实模板 templates/portfolio-cloudflare/package.json 还展示了package.json中的emdash.seed字段指向seed/seed.json用于声明数据库种子文件以及deploy脚本astro build wrangler deploy的完整部署链路。开发服务器启动、迁移、种子与首次设置pnpm dev # 启动 Astro 开发服务器 npx emdash types # 从运行中的站点刷新类型启动后的运行行为值得注意迁移运行时在第一个请求时执行待处理的数据库迁移。种子当数据库为空且尚未完成 setup 时自动应用捆绑的种子数据即seed/seed.json定义的 schema 与演示内容。类型生成Astro 集成在服务器启动时生成emdash-env.d.ts。管理后台位于http://localhost:4321/_emdash/admin。首次运行需要走完 setup 流程创建管理员账号。总结EmDash 站点的配置体系围绕astro.config.mjs展开emdash()集成负责接线数据库SQLite/D1/libSQL与媒体存储local/R2output: server是内容动态化的前提反向代理场景下用siteUrl或EMDASH_SITE_URL/SITE_URL环境变量统一所有 origin 敏感功能的基准 URLlive.config.ts与自动生成的emdash-env.d.ts将 CMS schema 变成类型安全的 Astro 内容集合而emdash types命令则让类型生成可以在任何环境本地或远程实例随时刷新。掌握了这套配置骨架无论是本地自托管还是 Cloudflare 边缘部署都能快速搭建并维护一个生产可用的 EmDash 站点。赞分享CMS后端前端插件系统【免费下载链接】emdashEmDash is a full-stack TypeScript CMS based on Astro; the spiritual successor to WordPress项目地址https://gitcode.com/gh_mirrors/emdas/emdash点击查看免费下载相关推荐EmDash 站点配置完全指南从 astro.config.mjs 到类型生成EmDash 站点配置完全指南从 astro.config.mjs 到类型生成 EmDash 是基于 Astro 构建的全栈 TypeScript CMS站CMS后端前端插件系统EmDash 站点配置完全指南从 astro.config.mjs 到类型生成与多环境部署EmDash 站点配置完全指南从 astro.config.mjs 到类型生成与多环境部署 EmDash 是一个构建于 Astro 之上的全栈 TypeScrCMS后端前端插件系统EmDash CMS 站点配置完全指南从 astro.config.mjs 到类型生成EmDash CMS 站点配置完全指南从 astro.config.mjs 到类型生成 本篇指南围绕 EmDash基于 Astro 的全栈 TypeScriCMS后端前端插件系统上一篇终极指南如何用React Native Windows和WinUI 3构建现代化Windows应用下一篇ctop开发者指南如何扩展新的容器连接器创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/6 6:37:16

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/7 0:39:20

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/6 1:10:54

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/6 17:25:36

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/6 14:29:05

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/6 14:29:07

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉