Spec-Zone.ru › Sass

Importer<sync>

Объект, реализующий пользовательскую логику загрузки Sass для @use правил и @import правил. Его можно передать в importers или importer.

Вместо этого импортёрам, которые просто перенаправляют запросы к файлам на диске, рекомендуется использовать интерфейс FileImporter.

Разрешение загрузки

Процесс разрешения загрузки с помощью пользовательского импортёра выглядит следующим образом:

  • Компилятор встречает @use "db:foo/bar/baz".
  • Он вызывает canonicalize с "db:foo/bar/baz".
  • canonicalize возвращает new URL("db:foo/bar/baz/_index.scss").
  • Если компилятор уже загрузил таблицу стилей с этим каноническим URL, он повторно использует существующий модуль.
  • В противном случае он вызывает load с new URL("db:foo/bar/baz/_index.scss").
  • load возвращает ImporterResult, который компилятор использует в качестве содержимого модуля.

Подробнее о разрешении загрузок с помощью нескольких импортёров и путей загрузки см. в разделе importers.

Пример

sass.compile('style.scss', {
// An importer for URLs like `bgcolor:orange` that generates a
// stylesheet with the given background color.
importers: [{
canonicalize(url) {
if (!url.startsWith('bgcolor:')) returnnull;
returnnewURL(url);
},
load(canonicalUrl) {
return {
contents:`body {background-color: ${canonicalUrl.pathname}}`,
syntax:'scss'
};
}
}]
});

Параметры типов

  • sync extends "sync" | "async" = "sync" | "async"

    Методы canonicalize и load Importer<'sync'> должны возвращать результат синхронно, но такой импортёр можно передавать не только в compileAsync и compileStringAsync, но и в compile и compileString.

    Методы canonicalize и load Importer<'async'> могут возвращать результат как синхронно, так и асинхронно, но такой импортёр можно использовать только с compileAsync и compileStringAsync.

Иерархия

  • Importer
  • Определено в js-api-doc/importer.d.ts:179
Индекс

Свойства

nonCanonicalScheme?

Методы

canonicalize load

Свойства

Optional nonCanonicalScheme

nonCanonicalScheme?: string | string[]

Схема URL или набор схем (без :), которые этот импортёр обязуется никогда не использовать для URL, возвращаемых методом canonicalize. Если он всё же вернёт URL с одной из этих схем, это будет ошибкой.

Если это свойство задано, при каждом вызове canonicalize для URL с неканонической схемой в метод будет передан containingUrl, если он известен.

Эти схемы могут содержать только строчные буквы ASCII, цифры ASCII, +, - и .. Они не могут быть пустыми.

  • Определено в js-api-doc/importer.d.ts:314

Методы

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.sass
      • foo/bar/baz.scss
      • foo/bar/_baz.sass
      • foo/bar/_baz.scss

      Если URL был foo/bar/baz.scss, импортёр искал бы только:

      • foo/bar/baz.scss
      • foo/bar/_baz.scss

      Если импортёр обнаружит таблицу стилей по нескольким из этих URL, он должен выбросить исключение, указывающее на неоднозначность URL. Обратите внимание: если расширение указано явно, допускается наличие таблицы стилей с другим расширением.

    • Если ни один из возможных путей не подходит, импортёр должен выполнить такое же разрешение для URL с добавленным в конце /index. В приведённом выше примере он искал бы:

      • foo/bar/baz/index.sass
      • foo/bar/baz/index.scss
      • foo/bar/baz/_index.sass
      • foo/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.

    • Определено в js-api-doc/importer.d.ts:269

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.

    • Определено в js-api-doc/importer.d.ts:297
sass
  • Компиляция
    • AsyncCompiler
    • Compiler
    • CompileResult
    • compile
    • compileAsync
    • compileString
    • compileStringAsync
    • initAsyncCompiler
    • initCompiler
  • Параметры
    • Options
    • StringOptions
    • OutputStyle
    • StringOptionsWithImporter
    • StringOptionsWithoutImporter
    • Syntax
  • Логгер
    • Logger
      • silent
    • Logger
    • SourceLocation
    • SourceSpan
    • LoggerWarnOptions
  • Импортёр
    • NodePackageImporter
    • FileImporter
    • Importer
    • ImporterResult
  • Пользовательская функция
    • CalculationInterpolation
    • CalculationOperation
    • SassArgumentList
    • SassBoolean
    • SassCalculation
    • SassColor
    • SassFunction
    • SassList
    • SassMap
    • SassMixin
    • SassNumber
    • SassString
    • Value
    • CalculationOperator
    • CalculationValue
    • CustomFunction
    • ListSeparator
    • sassFalse
    • sassNull
    • sassTrue
  • Прочее
    • Exception
    • CanonicalizeContext
    • Deprecations
    • LegacyFileOptions
    • ChannelName
    • ChannelNameHsl
    • ChannelNameHwb
    • ChannelNameLab
    • ChannelNameLch
    • ChannelNameRgb
    • ChannelNameXyz
    • ColorSpaceHsl
    • ColorSpaceHwb
    • ColorSpaceLab
    • ColorSpaceLch
    • ColorSpaceRgb
    • ColorSpaceXyz
    • GamutMapMethod
    • HueInterpolationMethod
    • KnownColorSpace
    • PolarColorSpace
    • PromiseOr
    • RectangularColorSpace
    • info
  • Устаревший API
    • types
      • Boolean
      • Color
      • Error
      • List
      • Map
      • Null
      • Number
      • String
    • LegacyException
    • LegacyImporterThis
    • LegacyPluginThis
    • LegacyResult
    • LegacySharedOptions
    • LegacyStringOptions
    • LegacyAsyncFunction
    • LegacyAsyncFunctionDone
    • LegacyAsyncImporter
    • LegacyFunction
    • LegacyImporter
    • LegacyImporterResult
    • LegacyOptions
    • LegacySyncFunction
    • LegacySyncImporter
    • LegacyValue
    • FALSE
    • NULL
    • TRUE
    • render
    • renderSync
  • Сообщения
    • Version
    • Deprecation
    • DeprecationOrId
    • DeprecationStatus
    • deprecations

© 2006–2025 the Sass team, and numerous contributors
Licensed under the MIT License.
https://sass-lang.com/documentation/js-api/interfaces/Importer

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API