宣布 `pkg:` 导入器

发布日期:2024 年 2 月 16 日 作者:Natalie Weizenbaum

几个月前,我们 征求了反馈意见,关于一个新的导入器标准的提案,该标准可以使用共享的 `pkg:` 方案从各种不同的包管理器加载包,以及一个内置的 `pkg:` 导入器,它支持 Node.js 的模块解析算法。今天,我很高兴地宣布,此功能已在 Dart Sass 1.71.0 中发布!

您不再需要手动将 `node_modules` 添加到您的 `loadPaths` 选项中,也不必担心嵌套包是否能正常工作。您也不再需要在 URL 中添加 `~` 并放弃所有可移植性。现在,您只需传递 `importers: [new NodePackageImporter()]` 并编写 `@use 'pkg:library'`,它就会按您想要的方式在开箱即用地工作。

什么是 `pkg:` 导入器?什么是 pkg: 导入器? 永久链接

您可以将 `pkg:` 导入器视为一种规范,任何人都可以通过编写一个 自定义导入器 来实现它,该导入器遵循 一些规则。我们已经为 Node.js 模块算法实现了一个,但是您可以实现一个从 RubyGemsPyPIComposer 加载 Sass 文件的导入器。这样,Sass 文件就不必更改它加载的 URL,无论它从哪里加载。

`pkg:` URL 的格式是什么?pkg: URL 的格式是什么? 永久链接

最简单的 URL 只是 `pkg:library`。这将找到您包管理器中的 `library` 包并加载它的主入口点文件,无论它如何定义。您还可以编写 `pkg:library/path/to/file`,在这种情况下,它将在包的源目录中查找 `path/to/file`。与任何 Sass 导入器一样,它将执行标准解析以处理文件扩展名、部分索引文件

如何发布一个与 Node.js `pkg:` 导入器一起使用的 npm 包?如何发布一个与 Node.js pkg: 导入器一起使用的 npm 包? 永久链接

Node.js `pkg:` 导入器支持在 `package.json` 中声明 Sass 文件的所有现有约定,因此它应该可以开箱即用地与现有的 Sass 包一起工作。如果您正在编写一个新的包,我们建议您使用 `“exports”` 字段 以及 `“sass”` 键来定义默认情况下要加载的样式表。

{
  "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",
    },
  }
}