
Ghost 動手改代碼前如何判斷功能處于什么遷移階段Active、Exploring 與 Planned 狀態【免費下載鏈接】GhostIndependent technology for modern publishing, memberships, subscriptions and newsletters.項目地址: https://gitcode.com/GitHub_Trending/gh/Ghost在 Ghost 代碼庫里改代碼之前有一個繞不開的前置判斷你要動的那塊功能當前處于哪種遷移階段Ghost 正在同時推進 Ember 管理后臺向 React 遷移、JavaScript 向 TypeScript 遷移、CommonJS 向 ESM 遷移等多條遷移線倉庫里最常見的寫法往往是遺留模式而不是你應該照抄的模式。判斷依據只有一個事實來源docs/codebase/direction.md。這份文檔明確記錄每個方向的當前狀態并且聲明Ghost 7.0 計劃于 2027 年上半年發布該文檔描述的正是通向這個版本的工作方向它不是路線圖也不是一次遷移完所有東西的承諾。三個狀態術語的確切含義direction.md 用三個術語描述每個遷移方向所處的階段改代碼前先確認自己面對的是哪一種Active migration活躍遷移新工作走新路徑同時存量代碼以連貫的單元逐步遷過來。Exploring探索中方向已經達成共識但實現模式還在摸索尚無定論。Planned已計劃具體變更已確定要發生但遷移尚未開始。這個區分直接決定你的寫法Active 意味著新功能必須走新路徑Exploring 意味著方向定了但模式沒定先跟隨鄰近的成熟實現別自己發明框架Planned 意味著舊契約目前仍受支持但不要再基于它構建新功能。在狀態表中定位你要改的區域打開 docs/codebase/direction.md核心內容是一張Direction at a glance狀態表按區域列出遷移方向和當前狀態以下為該表當前內容區域遷移方向狀態Admin UIEmber 到 ReactActive migrationApplication codeJavaScript 到 TypeScriptActive migrationNode.js modulesCommonJS 到 ESMActive migrationRuntime boundaries用 Zod 校驗未知數據ExploringServer dependencies注入有狀態依賴ExploringData accessBookshelf 到 services、repositories、KnexExploringServer state實例可互換、無狀態Active migrationRepository layout相關項目合并進 monorepoActive migrationDevelopment patterns為重復性工作建立 golden pathExploringDatabase supportGhost 7.0 移除 SQLitePlannedEditor contentGhost 7.0 移除 MobiledocPlannedSelf-hostingGhost 7.0 棄用 Ghost-CLI改用 DockerActive migrationNode.js runtime跟上 Node CurrentPlannedAuthentication基于 Better Auth 的標準化認證ExploringLintingESLint 到 OxlintPlanned如果你的任務落在表中某個區域按那一行的狀態行事如果表中沒有對應行說明該方向未被列為當前遷移項按就近的現有實現處理即可。各狀態對應的操作規則Active migration新功能必須走新路徑以 Admin UI 為例。apps/admin/README.md 說明新的 React 管理后臺通過 Ember Bridge 漸進替換 Ember 管理后臺已遷移到 React 的路由渲染 React 組件未遷移的路由回落到 Ember兩者共享同一 UI 空間。direction.md 對此的要求是新 Admin 功能在apps/admin/中構建用admin-x-framework做 API 訪問、用 Shade 做 UI不要因為功能的舊版本是 Ember 就新增 Ember 路由或繼續用 Ember。遷移既有 Ember 功能時要在連貫的產品邊界上進行并保留跨橋的導航、認證、共享狀態和舊服務端行為。服務端代碼同理。ghost/core/core/server/services/README.md 規定新的獨立 service 邏輯默認用 TypeScript除非必須擴展現有 JavaScript 模塊domain 邏輯用 TypeScript 加命名導出只在 boot 代碼或既有require()邊界保留薄薄的 CommonJS 包裝。內部包層面packages/README.md 規定新的內部包是 TypeScript-only 的 ESM 包tryghost/name、type: module、私有、不發 npm release并從packages/_template起步每個私有包在ghostPackage.goldenPath中聲明生命周期狀態——compliant表示按 golden path 機械檢查migration是等待后續現代化 PR 的臨時態exempt是記錄在案的長期例外后兩者必須帶非空ghostPackage.reason。Exploring方向已定、模式未定跟隨鄰近實現Zod 是新的 runtime 邊界首選校驗庫從 HTTP、數據庫、配置、隊列、第三方服務到達的數據在校驗前應視為unknown但 direction.md 明確說明 schema 的歸屬與共享方式還沒有統一布局此時的正確做法是跟隨一個已驗證的鄰近實現、保持一種形狀只有一個真相來源而不是自己拼一套手寫校驗。數據訪問方向Bookshelf 到 services/repositories/Knex同樣處于 Exploring完整模式未定不要新建 Bookshelf model、不要往 model 生命周期鉤子里加新業務邏輯在既有 Bookshelf 功能里工作時先把行為收攏到顯式的 service 或 repository 接縫后面再替換持久化不要為了繞開 model 而繞開既有行為。Exploring 狀態還有一個明確約束把已同意的方向當作設計約束而不是允許你發明局部框架實現模式不清楚時先把它定下來再往代碼庫其他位置復制。Planned變更已確定但未開始保留契約但不要圍繞它建新功能SQLite 與 Mobiledoc 都在 7.0 計劃移除Ghost 目前通過better-sqlite3支持 SQLite舊配置名sqlite3仍兼容但不要新增 SQLite 專屬行為也不要假設 SQLite 會長期是受支持的生產數據庫。自托管方向上 Ghost-CLI 將在 7.0 被棄用、以 Docker 取代。在這些契約被移除之前保留現有行為在新功能里不要依賴它們。Node.js 版本支持屬于 Planned長期跟上 Node Current當前事實是Ghost 支持 Node.js 22 和 24CI 同時測試這兩條線新代碼和新依賴必須兩者都能跑。判斷版本支持時查 docs/reference/node-compatibility.md 的兼容表不要根據本機裝的版本推斷。動手前的核對步驟以下命令均來自倉庫文檔在 monorepo 根目錄或對應包目錄下執行確認本地環境可用新 checkout 時pnpm setup pnpm devpnpm dev會同時啟動 MySQL、Redis 容器以及 Admin 和 Portal 的 dev watcher主站位于http://localhost:2368管理后臺位于http://localhost:2368/ghost/見 docs/README.md。確認你所在包符合 golden path改動packages/下的內部包時pnpm lint:packages該命令校驗ghostPackage.goldenPath狀態以及所有可機械執行的規則packages/README.md。改動 Admin 時確認部署兼容性Admin 與 Core 可以不同時間部署。依賴新設置、新端點或新配置值的新 Admin UI 必須檢測后端支持并在缺失時隱藏或安全禁用該功能——只有 Labs flag 不算兼容性檢查因為 flag 可能先于支持它的后端版本存在。apps/admin/README.md 要求為舊后端場景補驗收測試。交接前跑倉庫統一的校驗命令見 docs/contributing/workflow.mdpnpm checkpnpm check依次執行pnpm format:check、pnpm lint、pnpm test但不包含瀏覽器 E2E 套件和 Ember Admin 測試——當你的改動落在這些區域時需要按測試指南另行運行對應測試。在過渡代碼中工作的邊界direction.md 對Working in transitional code給出了硬性約束這些約束獨立于任何具體功能不要假設數量最多的模式就是被偏好的模式存在受支持的新路徑時不要擴大遺留依賴遷移要遷一個連貫的邊界連同它的測試和兼容行為不要把大范圍清理混進無關變更漸進遷移需要新舊兩條路徑共存時兩條都要保留當工作在不同階段之間移動、某次遷移完成、或某個計劃中的工具變成權威依據時更新 direction.md 本身。最后的限制要說清楚狀態表是某一時點的快照開始一個跨天的任務前重新核對當前main上的 direction.md當某個區域已有專門的聚焦指南如 authentication.md、services 指南實現細節以那份指南為準direction.md 只提供審查方向。【免費下載鏈接】GhostIndependent technology for modern publishing, memberships, subscriptions and newsletters.項目地址: https://gitcode.com/GitHub_Trending/gh/Ghost創作聲明:本文部分內容由AI輔助生成(AIGC),僅供參考