Importer<sync>
Параметры типов
-
sync extends "sync" | "async" = "sync" | "async"
Методы canonicalize и load
Importer<'sync'>должны возвращать результат синхронно, но такой импортёр можно передавать не только в compileAsync и compileStringAsync, но и в compile и compileString.Методы canonicalize и load
Importer<'async'>могут возвращать результат как синхронно, так и асинхронно, но такой импортёр можно использовать только с compileAsync и compileStringAsync.
Иерархия
- Importer
Индекс
Свойства
Методы
Свойства
Optional nonCanonicalScheme
Схема URL или набор схем (без :), которые этот импортёр обязуется никогда не использовать для URL, возвращаемых методом canonicalize. Если он всё же вернёт URL с одной из этих схем, это будет ошибкой.
Если это свойство задано, при каждом вызове canonicalize для URL с неканонической схемой в метод будет передан containingUrl, если он известен.
Эти схемы могут содержать только строчные буквы ASCII, цифры ASCII, +, - и .. Они не могут быть пустыми.
Методы
canonicalize
- canonicalize(url: string, context: CanonicalizeContext): PromiseOr<null | URL, sync>
-
Если этот импортёр распознаёт
url, возвращает его каноническое представление.Если Sass уже загрузил таблицу стилей с возвращённым каноническим URL, он повторно использует существующее дерево разбора (и загруженный модуль для
@use). Это означает, что импортёры должны гарантировать, что один и тот же канонический URL всегда ссылается на одну и ту же таблицу стилей, даже при использовании разных импортёров. Поэтому импортёрам рекомендуется использовать уникальные схемы URL, чтобы различать их.По возможности пользовательские импортёры должны канонизировать URL так же, как встроенный импортёр файловой системы:
-
Импортёр должен искать таблицы стилей, добавляя префикс
_к базовому имени URL и расширения.sassи.scss, если у URL ещё нет одного из этих расширений. Например, если 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.Многократный вызов canonicalize с одним и тем же URL должен возвращать один и тот же результат. Вызов canonicalize с URL, возвращённым предыдущим вызовом canonicalize, должен возвращать этот URL.
Относительные URL
Относительные загрузки в таблицах стилей, загруженных импортёром, сначала разрешаются относительно канонического URL таблицы стилей, в которой они содержатся, а затем передаются обратно методу canonicalize локального импортёра, загрузившего эту таблицу стилей. Например, предположим, что приведённый выше пример «Разрешение загрузки» вернул таблицу стилей, содержащую
@use "mixins":- Компилятор разрешает URL
mixinsотносительно канонического URL текущей таблицы стилейdb:foo/bar/baz/_index.scssи получаетdb:foo/bar/baz/mixins. - Он вызывает canonicalize с
"db:foo/bar/baz/mixins". -
canonicalize возвращает
new URL("db:foo/bar/baz/_mixins.scss").
Поэтому метод canonicalize должен возвращать осмысленный результат при вызове с URL, относительным к URL, возвращённому предыдущим вызовом canonicalize.
Если метод
canonicalizeлокального импортёра возвращаетnull, относительный URL по очереди передаётся методамcanonicalize()каждого из importers, пока один из них не вернёт канонический URL. Если этого не сделает ни один из них, загрузка завершится неудачей.Выбрасываемые исключения
any — Если этот импортёр распознаёт
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>
-
Загружает текст Sass для указанного
canonicalUrlили возвращаетnull, если импортёр не может найти таблицу стилей, на которую он ссылается.Выбрасываемые исключения
any — Если импортёр находит таблицу стилей по адресу
url, но по какой-либо причине не может её загрузить, или еслиurlоднозначно относится к этому импортёру, но не указывает на существующую таблицу стилей, импортёр может выбросить исключение, которое будет обёрнуто Sass. Если у объекта исключения есть свойствоmessage, оно будет использовано как сообщение обёрнутого исключения; в противном случае будет использовано свойствоtoString()объекта исключения. Это означает, что импортёры могут безопасно выбрасывать обычные строки.Параметры
-
canonicalUrl: URL
Канонический URL загружаемой таблицы стилей. Гарантируется, что он получен в результате вызова canonicalize, хотя не каждый вызов canonicalize приводит к вызову load.
Возвращает PromiseOr<null | ImporterResult, sync>
Содержимое таблицы стилей по адресу
canonicalUrl, если её удалось загрузить, илиnull, если загрузить её не удалось.Метод также может возвращать
Promise, но в таком случае импортёр можно передавать только в compileAsync и compileStringAsync, а не в compile или compileString. -
© 2006–2025 the Sass team, and numerous contributors
Licensed under the MIT License.
https://sass-lang.com/documentation/js-api/interfaces/Importer
Объект, реализующий пользовательскую логику загрузки Sass для
@useправил и@importправил. Его можно передать в importers или importer.Вместо этого импортёрам, которые просто перенаправляют запросы к файлам на диске, рекомендуется использовать интерфейс FileImporter.
Разрешение загрузки
Процесс разрешения загрузки с помощью пользовательского импортёра выглядит следующим образом:
@use "db:foo/bar/baz"."db:foo/bar/baz".new URL("db:foo/bar/baz/_index.scss").new URL("db:foo/bar/baz/_index.scss").Подробнее о разрешении загрузок с помощью нескольких импортёров и путей загрузки см. в разделе importers.
Пример