重大变更:旧版 JS API

Dart Sass 最初使用基于 Node Sass 使用的 API,但在 Dart Sass 1.45.0 中将其替换为新的现代 API。旧版 JS API 现已弃用,将在 Dart Sass 2.0.0 中移除。

迁移用法迁移用法永久链接

入口点入口点永久链接

旧版 JS API 具有两个用于编译 Sass 的入口点:renderrenderSync,它们接收包含 file(编译文件)或 data(编译字符串)的选项对象。现代 API 有四个:compilecompileAsync 用于编译文件,compileStringcompileStringAsync 用于编译字符串。这些函数将路径或源字符串作为其第一个参数,然后将所有其他选项的对象作为其第二个参数。与使用回调的 render 不同,compileAsynccompileStringAsync 返回 promise。

请参阅 用法文档 以获取更多详细信息。

导入器导入器永久链接

旧版 API 中的导入器包含单个函数,该函数接收依赖项规则 URL 和包含样式表的 URL(以及异步导入器的 done 回调),并返回一个对象,其中包含磁盘上的 file 路径或要加载的样式表的 contents

现代 API Importer 包含两种方法:canonicalize,它接收规则 URL 并返回该 URL 的规范形式;以及 load,它接收规范 URL 并返回一个包含已加载样式表内容的对象。这种拆分确保仅加载一次同一模块,并且相对 URL 始终如一地工作。异步导入器使这两种方法都返回 promise。

还有一个特殊的 FileImporter 将所有加载重定向到磁盘上的现有文件,在从返回 file 而不是 contents 的旧版导入器迁移时应使用它。

自定义函数自定义函数永久链接

在旧版 JS API 中,自定义函数为每个 Sass 参数都使用单独的 JS 参数,异步自定义函数则另外使用 done 回调。在现代 API 中,自定义函数改为使用单个 JS 参数,其中包含所有 Sass 参数的列表,异步自定义函数返回 promise。

现代 API 还使用更强大的 Value 类,该类支持所有 Sass 值类型、类型断言以及简单的映射和列表查找。

打包工具打包工具永久链接

如果您使用的是调用 Sass API 而不是直接使用它的打包工具或其他工具,则可能需要更改传递给该工具的配置以告知它使用现代 API。

Webpack 应该默认已经使用现代 API,但如果您收到警告,请将 api 设置为 "modern""modern-compiler"。请参阅 Webpack 的文档 以获取更多详细信息。

Vite 仍然默认使用旧版 API,但您可以通过类似的方式将其切换,方法是将 api 设置为 "modern""modern-compiler"。请参阅 Vite 的文档 以获取更多详细信息。

对于其他工具,请检查其文档或问题跟踪器以获取有关支持现代 Sass API 的信息。

静默警告静默警告永久链接

虽然旧版 JS API 在 Dart Sass 1.45.0 中与现代 API 一起被标记为已弃用,但我们从 Dart Sass 1.79.0 开始发出使用它的警告。如果您尚未能够迁移到现代 API,但现在想静默警告,可以在 silenceDeprecations 选项中传递 legacy-js-api

const sass = require('sass');

const result = sass.renderSync({
  silenceDeprecations: ['legacy-js-api'],
  ...
});

这将暂时静默警告,但旧版 API 将在 Dart Sass 2.0.0 中完全移除,因此您仍应计划尽快迁移。