Skip to content

內建插件

createEngine() 在附加任何來自 config.plugins 的使用者插件之前,始終會載入五個核心插件。

核心插件

五個內建插件以固定順序在 createEngine() 內部建立:

順序插件名稱設定鍵用途
1core:importantimportant在 CSS 值後附加 !important
2core:variablesvariables帶有清除功能的 CSS 自訂屬性
3core:keyframeskeyframes@keyframes 動畫管理
4core:selectorsselectors選擇器別名解析
5core:shortcutsshortcuts可重複使用的樣式捷徑

插件載入與排序

建立核心插件並附加使用者插件後,所有插件會依其 order 屬性一起排序

order排序權重執行時機
'pre'0最先執行
undefined1預設值(核心插件使用此值)
'post'2最後執行
ts
// Conceptual loading order inside createEngine():
//
// 1. Core plugins are created first:
//    - core:important
//    - core:variables
//    - core:keyframes
//    - core:selectors
//    - core:shortcuts
//
// 2. User plugins from config.plugins are appended.
//
// 3. ALL plugins are sorted together by `order`:
//    - order: 'pre'  → 0  (runs first)
//    - order: undefined → 1  (default — core plugins use this)
//    - order: 'post' → 2  (runs last)
//
// 4. Hooks execute in the sorted order:
//    configureRawConfig → rawConfigConfigured
//    → resolveConfig
//    → configureResolvedConfig → configureEngine

WARNING

由於核心插件未設定 order(權重為 1),具有 order: 'pre' 的使用者插件會在核心插件之前執行。這對於在核心插件處理之前修改原始設定非常有用。

鉤子執行流程

所有插件(核心與使用者的)都參與同一個鉤子流程,依排序順序執行:

在執行階段,當樣式被處理時會觸發額外的鉤子:

  • transformSelectors — 解析選擇器別名
  • transformStyleItems — 解析捷徑字串
  • transformStyleDefinitions — 展開 __important__shortcut
  • preflightUpdated — 變數/關鍵影格已變更
  • atomicStyleAdded — 新的原子化樣式已被註冊
  • autocompleteConfigUpdated — 自動補齊中繼資料已變更

設定內建插件

你可透過 EngineConfig 的頂層鍵來設定內建插件,而非匯入內部工廠函式:

ts
import { defineEngineConfig } from '@pikacss/unplugin-pikacss'

export default defineEngineConfig({
  important: { /* ... */ },
  variables: { /* ... */ },
  keyframes: { /* ... */ },
  selectors: { /* ... */ },
  shortcuts: { /* ... */ },
})

插件詳細頁面

原始碼參考

  • packages/core/src/internal/engine.tscreateEngine()、插件連接
  • packages/core/src/internal/plugin.tsresolvePlugins()、鉤子執行
  • packages/core/src/internal/plugins/ — 各個插件實作