Importer<sync>
类型参数
-
sync extends "sync" | "async" = "sync" | "async"
Importer<'sync'>的 canonicalize 和 load 必须同步返回,但作为回报,它除了可以传递给 compileAsync 和 compileStringAsync 之外,还可以传递给 compile 和 compileString。Importer<'async'>的 canonicalize 和 load 可以同步或异步返回,但它只能与 compileAsync 和 compileStringAsync 一起使用。
层次结构
- 导入器
索引
属性
可选 nonCanonicalScheme
一个 URL 方案或一组方案(不带 :),该导入器承诺永远不会将其用于 canonicalize 返回的 URL。如果它确实返回了使用其中一个方案的 URL,则为错误。
如果设置了此项,则对具有非规范方案的 URL 调用 canonicalize 时,如果已知,则会将 containingUrl 传递给它。
这些方案可能仅包含小写 ASCII 字母、ASCII 数字、+、- 和 .。它们不能为空。
方法
canonicalize
- canonicalize(url: string, context: CanonicalizeContext): PromiseOr<null | URL, sync>
-
如果此导入器识别
url,则返回其规范格式。如果 Sass 已经使用返回的规范 URL 加载了样式表,则它会重新使用现有的解析树(以及
@use的加载模块)。这意味着导入器**必须确保**相同的规范 URL 始终引用相同的样式表,即使跨不同的导入器也是如此。因此,鼓励导入器使用唯一的 URL 方案来区分彼此。尽可能地,自定义导入器应以与内置文件系统导入器相同的方式规范化 URL
导入器应通过在 URL 的基本名称前添加前缀
_,以及在 URL 还没有这些扩展名之一的情况下添加扩展名.sass和.scss来查找样式表。例如,如果 URL 为foo/bar/baz,则导入器将查找foo/bar/baz.sassfoo/bar/baz.scssfoo/bar/_baz.sassfoo/bar/_baz.scss
如果 URL 为
foo/bar/baz.scss,则导入器将仅查找foo/bar/baz.scssfoo/bar/_baz.scss
如果导入器在多个这些 URL 中找到样式表,则它应该抛出一个异常,指示 URL 模棱两可。请注意,如果显式指定了扩展名,则允许存在具有相反扩展名的样式表。
如果所有可能的路径均无效,则导入器应在 URL 后跟
/index上执行相同的解析。在上面的示例中,它将查找foo/bar/baz/index.sassfoo/bar/baz/index.scssfoo/bar/baz/_index.sassfoo/bar/baz/_index.scss
如上所述,如果导入器在多个这些 URL 中找到样式表,则它应该抛出一个异常,指示导入模棱两可。
如果没有找到样式表,则导入器应返回
null。使用相同的 URL 多次调用 canonicalize 必须返回相同的结果。使用先前对 canonicalize 的调用返回的 URL 调用 canonicalize 必须返回该 URL。
从导入器加载的样式表中的相对路径,通过解析相对于包含它的样式表的规范化URL来处理,并将该URL传递回导入器的 canonicalize 方法。例如,假设“解析加载”示例 上面返回了一个包含
@use "mixins"的样式表。- 编译器会解析相对于当前样式表的规范化URL
db:foo/bar/baz/_index.scss的URLmixins,得到db:foo/bar/baz/mixins。 - 它使用
"db:foo/bar/baz/mixins"调用 canonicalize。 - canonicalize 返回
new URL("db:foo/bar/baz/_mixins.scss")。
因此,当使用相对于先前调用 canonicalize 返回的URL调用时,canonicalize 必须返回有意义的结果。
抛出异常
任何 - 如果此导入器识别
url但确定它无效,则可能会抛出 Sass 将包装的异常。如果异常对象具有message属性,则将其用作包装异常的消息;否则,将使用异常对象的toString()。这意味着导入器可以安全地抛出纯字符串。参数
-
url: string
加载的URL。由于这可能是相对路径,因此它表示为字符串而不是URL对象。
-
context: CanonicalizeContext
返回 PromiseOr<null | URL, sync>
如果此导入器识别
url,则为绝对URL,否则为null。如果返回null,则其他导入器或 加载路径可能会处理加载。这也可以返回一个
Promise,但如果这样做,则导入器可能只能传递给 compileAsync 和 compileStringAsync,而不是 compile 或 compileString。
load
- load(canonicalUrl: URL): PromiseOr<null | ImporterResult, sync>
-
加载给定
canonicalUrl的 Sass 文本,如果此导入器找不到它引用的样式表,则返回null。抛出异常
任何 - 如果此导入器在
url处找到样式表,但由于某种原因加载失败,或者url与此导入器唯一关联但未引用真实样式表,则导入器可能会抛出 Sass 将包装的异常。如果异常对象具有message属性,则将其用作包装异常的消息;否则,将使用异常对象的toString()。这意味着导入器可以安全地抛出纯字符串。参数
-
canonicalUrl: URL
要加载的样式表的规范化URL。这保证来自对 canonicalize 的调用,尽管并非每次对 canonicalize 的调用都会导致对 load 的调用。
返回 PromiseOr<null | ImporterResult, sync>
如果可以加载,则为
canonicalUrl处样式表的内容,如果不能加载,则为null。这也可以返回一个
Promise,但如果这样做,则导入器可能只能传递给 compileAsync 和 compileStringAsync,而不是 compile 或 compileString。 -
一个实现自定义 Sass 加载逻辑的对象,用于
@use规则 和@import规则。它可以传递给 importers 或 importer。鼓励仅将文件重定向到磁盘上的导入器使用 FileImporter 接口。
解析加载
这是使用自定义导入器解析加载的过程
@use "db:foo/bar/baz"。"db:foo/bar/baz"调用 canonicalize。new URL("db:foo/bar/baz/_index.scss")。new URL("db:foo/bar/baz/_index.scss")调用 load。有关使用多个导入器和加载路径解析加载的方式的更多详细信息,请参阅 importers。
示例