EmDash 1.0 移除了在 0.x 期間已棄用的 API,並將僅由 EmDash 自身載入的進入點移到 emdash/internal/ 下。本指南列出每項破壞性變更,以及你的站台需要更新的內容。
升級相依套件
將 emdash 以及站台使用的其他 EmDash 套件更新到最新版本,然後重新建置。以下範例會更新一個 Cloudflare 站台:
pnpm up --latest emdash @emdash-cms/cloudflare
pnpm build
如果你的部署會執行 emdash migrate,請針對升級後建置所產生的 .emdash/migrations.json 執行它。該指令會拒絕早期 EmDash 版本寫入的清單。
升級後,你的站台可能無需進一步修改即可建置和執行。如果建置失敗,或 EmDash 在啟動時報錯,請逐項處理下面的破壞性變更。
要查看每個套件的完整變更清單,請參閱其在發布頁面上的條目。
破壞性變更
已移除:cloudflareCache()
在早期版本中,@emdash-cms/cloudflare 的 cloudflareCache() 提供了一個路由快取提供者,透過 Cloudflare REST API 清除已快取的頁面。
cloudflareCache() 及其 @emdash-cms/cloudflare/cache 和 @emdash-cms/cloudflare/cache/config 進入點已被移除。匯入它的站台將建置失敗。
我該怎麼做?
將它替換為 Astro Cloudflare 轉接器的 cacheCloudflare() 提供者,它使用 Workers Cache。設定此提供者後,轉接器會在產生的部署設定中啟用 Workers Cache。
以下範例展示了 astro.config.mjs 中的改動:
import { cloudflareCache } from "@emdash-cms/cloudflare";
import { cacheCloudflare } from "@astrojs/cloudflare/cache";
export default defineConfig({
cache: {
provider: cloudflareCache(),
provider: cacheCloudflare(),
},
});
Workers Cache 透過 cloudflare:workers 中的 cache.purge() 清除快取,因此你可以從 Worker 中刪除 CF_ZONE_ID 和 CF_CACHE_PURGE_TOKEN 密鑰。KV 物件快取(kvCache())保持不變。
已移除:emdash/ui 中的 Comments 和 CommentForm
在早期版本中,Comments 和 CommentForm 元件同時從 emdash/ui 和 emdash/ui/comments 匯出。
現在它們僅從 emdash/ui/comments 匯出。從 emdash/ui 匯入任一元件的站台將建置失敗。
我該怎麼做?
更新匯入路徑。元件本身沒有變化。
---
import { Comments, CommentForm } from "emdash/ui";
import { Comments, CommentForm } from "emdash/ui/comments";
---
已移除:emdash dev 和 emdash auth secret
在早期版本中,emdash dev 會啟動一個以本機 ./data.db 為後端的開發伺服器,emdash auth secret 會為 EMDASH_AUTH_SECRET 產生一個值。
這兩個指令均已移除。執行其中任何一個都會以 Unknown command 結束。
我該怎麼做?
將 emdash dev 替換為站台自己的開發腳本,例如 pnpm dev,或執行 astro dev。此後站台會使用其設定中的資料庫轉接器。
如果你的 package.json 在 emdash 下有 url 鍵,請刪除它。要從遠端站台產生型別,請執行 emdash types --url <site-url> 或設定 EMDASH_URL。
請從腳本中移除 emdash auth secret。如果你的站台已經設定了 EMDASH_AUTH_SECRET,請保留它:EmDash 仍會讀取它,以確保已儲存的留言者 IP 雜湊保持穩定。如需對外掛密鑰進行靜態加密,請使用 emdash secrets generate 產生加密金鑰。
已移除:experimental.registry
在早期版本中,你可以透過 emdash() 選項中的 experimental.registry 設定外掛註冊表。
該選項已被移除,experimental 選項本身也一併移除。仍然設定 experimental.registry 的站台會在啟動時報錯,錯誤訊息會指向頂層的 registry 選項。
我該怎麼做?
將該值原樣移到頂層的 registry 選項。它接受相同的 URL 字串或設定物件。
emdash({
experimental: {
registry: {
aggregatorUrl: "https://registry.example.com",
policy: { minimumReleaseAge: "48h" },
},
},
registry: {
aggregatorUrl: "https://registry.example.com",
policy: { minimumReleaseAge: "48h" },
},
});
如果留下了空的 experimental: {} 區塊,請刪除它。TypeScript 設定會將其回報為錯誤。
已變更:內部進入點移至 emdash/internal/
在早期版本中,emdash 公開了 emdash/routes/*、emdash/middleware/*、emdash/db/sqlite-migrations 和 emdash/plugin-test-runtime 等僅由 EmDash 自身載入的進入點。
這些進入點現在位於 emdash/internal/ 下。@emdash-cms/cloudflare 中的 D1 和 Hyperdrive 遷移執行器同樣如此,它們位於 @emdash-cms/cloudflare/internal/db/ 下。它們不屬於公開 API,其匯出可能在任何版本中變化。透過 astro.config.mjs 中的 emdash() 設定 EmDash 的站台不受影響。
我該怎麼做?
如果你的專案直接匯入了這些路徑中的任何一個,請將匯入替換為公開 API:
- 要設定資料庫、物件快取或媒體提供者,請使用
emdash/db中的sqlite()、libsql()或postgres(),emdash/astro中的memoryCache(),或emdash/media中的localMedia()。 - 要測試外掛,請使用
@emdash-cms/plugin-test,而不是emdash/plugin-test-runtime。 - 要在 EmDash 的中介軟體之前執行你自己的中介軟體,請設定
emdash()的middleware.outer選項。
內部的驗證、初始設定、重新導向和請求上下文中介軟體沒有公開的替代方案。
棄用
已棄用:早期的外掛能力名稱
在早期版本中,外掛可以使用 read:content、network:fetch 和 page:inject 等名稱宣告能力,而不會有任何警告。
對於每個宣告了這些已棄用名稱的外掛,EmDash 會在啟動時記錄一則警告,並列出各自目前的替代名稱(例如 read:content → content:read)。已棄用的名稱在整個 1.x 期間仍可使用。
我該怎麼做?
如果你使用的某個外掛觸發了該警告,請將其更新到使用目前名稱的版本,或請作者發布這樣的版本。如果你是該外掛的維護者,請在其清單中重新命名這些能力。目前名稱請參閱能力與安全。