宣佈推出 `pkg:` 導入器

Natalie Weizenbaum 發佈於 2024 年 2 月 16 日

幾個月前,我們徵求了大家對於新標準導入器的意見回饋,這個導入器可以使用共享的 pkg: 方案從不同的套件管理器載入套件,同時也內建了一個支援 Node.js 模組解析演算法的 pkg: 導入器。今天,我很興奮地宣布,這個功能已經在 Dart Sass 1.71.0 中正式推出!

您不再需要手動將 node_modules 新增到 loadPaths 選項,也不用擔心巢狀套件是否能正常運作。您也不再需要在網址中加入 ~ 並放棄所有可攜性。現在,您只需傳入 importers: [new NodePackageImporter()] 並撰寫 @use 'pkg:library',它就能立即如您所願地運作。

什麼是 pkg: 導入器?什麼是 pkg: 導入器? 永久連結

您可以將 pkg: 導入器想像成一個規範,任何人都可以透過撰寫遵循一些規則自訂導入器來實作它。我們已經為 Node.js 模組演算法實作了一個,但您也可以實作一個從 RubyGemsPyPIComposer 載入 Sass 檔案的導入器。這樣一來,無論 Sass 檔案從哪裡載入,都不需要更改其載入的網址。

pkg: 網址看起來像什麼?pkg: 網址看起來像什麼? 永久連結

最簡單的網址就是 pkg:library。這會在您的套件管理器中找到 library 套件,並載入其主要的入口點檔案,無論其如何定義。您也可以撰寫 pkg:library/path/to/file,在這種情況下,它會在套件的原始碼目錄中尋找 path/to/file。如同任何 Sass 導入器,它會執行標準解析來處理檔案副檔名、partialsindex 檔案

如何發佈與 Node.js pkg: 導入器相容的 npm 套件?如何發佈與 Node.js pkg: 導入器相容的 npm 套件? 永久連結

Node.js pkg: 導入器支援所有現有的在 package.json 中宣告 Sass 檔案的慣例,因此它應該可以與現有的 Sass 套件直接相容。如果您正在撰寫新的套件,我們建議使用带有 "sass" 鍵的 "exports" 欄位 來定義預設要載入的樣式表。

{
  "exports": {
    "sass": "styles/index.scss"
  }
}

Node.js pkg: 導入器支援完整的 "exports" 功能,因此您也可以為不同的子路徑指定不同的位置。

{
  "exports": {
    ".": {
      "sass": "styles/index.scss",
    },
    "./button.scss": {
      "sass": "styles/button.scss",
    },
    "./accordion.scss": {
      "sass": "styles/accordion.scss",
    }
  }
}

…甚至可以使用模式。

{
  "exports": {
    ".": {
      "sass": "styles/index.scss",
    },
    "./*.scss": {
      "sass": "styles/*.scss",
    },
  }
}