Importer<sync>
Type Parameters
-
sync extends "sync" | "async" = "sync" | "async"
Методы canonicalize и load
Importer<'sync'>должны возвращать синхронно, но в свою очередь могут быть переданы в compile и compileString помимо compileAsync и compileStringAsync.Методы canonicalize и load
Importer<'async'>могут возвращать синхронно или асинхронно, но могут использоваться только с compileAsync и compileStringAsync.
Hierarchy
- Importer
Index
Properties
Methods
Properties
Схема, не являющаяся канонической 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 стилевого листа, который его содержит, и передачи этого 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.
Выбрасывает
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 для получения более подробной информации о способах разрешения загрузок с помощью нескольких импортеров и путей загрузки.
Пример