Lexicon
- Скрипты сборки
- Зависимость
- Дескриптор
- Зависимость разработки
- Извлекатель
- Поднятие
- Связыватель
- Локатор
- Манифест
- Монорепозиторий
- Пакет
- Взаимозависимость
- Пакет с взаимозависимостями
- Плагин
- Plug'n'Play
- PnP
- Портал
- Проект
- Диапазон
- Ссылка
- Резольвер
- Область
- Пакет-синглтон
- Транзитивная зависимость
- Отсоединённый пакет
- Виртуальный пакет
- Рабочее пространство
- Дерево проекта
- Yarn
- Установка без нуля
Скрипты сборки
Относится к задачам, выполняемым сразу после установки пакетов; обычно скрипты postinstall , настроенные в поле scripts из манифеста.
Скрипты сборки следует оставлять на усмотрение зависимостей, практически нет причин, по которым чисто JavaScript-пакеты должны их использовать. У них есть значительные побочные эффекты в проектах пользователей, поэтому взвесьте, действительно ли они вам нужны.
См. также: Скрипты жизненного цикла
Зависимость
Зависимость (перечисленная в поле dependencies манифеста) описывает отношение между двумя пакетами.
Когда пакет A имеет зависимость от пакета B, Yarn гарантирует, что A сможет получить доступ к B, если установка прошла успешно. Обратите внимание, что это единственное обещание, которое мы даём относительно обычных зависимостей: в частности, нет гарантии, что пакет B будет иметь такую же версию, что и в других частях приложения.
См. также: Зависимость разработки
См. также: Взаимозависимость
Дескриптор
Дескриптор — это сочетание имени пакета (например, lodash) и диапазона пакета (range) (например, ^1.0.0). Дескрипторы используются для идентификации набора пакетов, а не одного уникального пакета.
Зависимость разработки
Зависимость (перечисленная в поле devDependencies манифеста) описывает отношение между двумя пакетами.
Зависимости разработки очень похожи на обычные зависимости, за исключением того, что они имеют значение только для локальных пакетов. Пакеты, извлеченные из удалённых реестров, таких как npm, не смогут получить доступ к своим зависимостям разработки, но пакеты, установленные из локальных источников (таких как рабочие пространства или portal: протокол) смогут.
См. также: Зависимость
См. также: Взаимозависимость
Извлекатель
Извлекатели — это компоненты, ответственные за извлечение полных данных пакета из ссылки. Например, извлекатель npm загрузит пакетные архивы из реестра npm.
См. также: Архитектура
См. также: Fetcher интерфейс
Поднятие
Поднятие — это процесс преобразования дерева зависимостей для его оптимизации путём удаления максимально возможного числа узлов. Нет единого способа определить, как преобразовать дерево, и разные менеджеры пакетов применяют различные компромиссы (некоторые оптимизируют популярность пакета, размер пакета, самые новые версии и т. д.). По этой причине нельзя гарантировать окончательный вид дерева после поднятия - за исключением того, что пакеты всегда смогут получить доступ к зависимостям, перечисленным в их манифестах.
Поскольку поднятие тесно связано с файловой системой и разрешением Node, его структура делает лёгким ошибиться и случайно получить доступ к пакетам без их надлежащего определения в качестве зависимостей, а значит, без учёта при поднятии, что делает их существование непредсказуемым. По этим и другим причинам поднятие было вытеснено Plug'n'Play-разрешением с Yarn 2.
Связыватель
Связыватели — это компоненты, которые принимают на вход дерево зависимостей и хранилище данных о пакетах и генерируют в ответ дискретные артефакты, специфичные для целевой среды. Например, связыватель Plug'n'Play генерирует один .pnp.cjs файл.
См. также: Архитектура
См. также: Linker интерфейс
См. также: Installer интерфейс
Локатор
Локатор — это сочетание имени пакета (например, lodash) и ссылки пакета (например, 1.2.3). Локаторы используются для идентификации одного уникального пакета (интересно, что все допустимые локаторы также являются допустимыми дескрипторами).
Манифест
Манифест — это package.json файл.
Монорепозиторий
Монорепозиторий — это репозиторий, содержащий несколько пакетов. Например, Babel и Jest — примеры таких репозиториев; каждый из них содержит дюжину небольших пакетов, которые зависят друг от друга.
См. также: Рабочие пространства
Пакет
Пакеты — это узлы дерева зависимостей. Проще говоря, пакет — это набор исходного кода, обычно характеризуемого package.json в корне. Пакеты могут определять зависимости, которые представляют собой другие пакеты, которые необходимо сделать доступными для его правильной работы.
Взаимозависимость
Зависимость (перечисленная в поле peerDependencies манифеста) описывает отношение между двумя пакетами.
В отличие от обычных зависимостей, пакет A с взаимозависимостью от пакета B не гарантирует, что A сможет получить доступ к B — это зависит от пакета, зависящего от A, самостоятельно предоставлять версию B, совместимую с запросом A. Этот недостаток имеет и положительную сторону: пакет B, к которому получит доступ A, гарантированно будет таким же, как тот, который использовался предком A. Это очень важно, когда B использует проверки instanceof или синглтоны.
См. также: Зависимости разработки См. также: Взаимозависимость См. также: Пакет-синглтон
Пакет с взаимозависимостями
Пакет с взаимозависимостями — это пакет, в котором перечислены взаимозависимости.
См. также: Виртуальные пакеты
Плагин
Плагины — новая концепция, представленная в Yarn 2+. С помощью плагинов Yarn можно расширить и сделать ещё более мощным, будь то добавление новых резольверов, извлекателей или связывателей.
См. также: Плагины См. также: Plugin интерфейс
Plug'n'Play
Plug'n'Play — это альтернативная стратегия установки, которая вместо генерации обычных node_modules каталогов, генерирует один единственный файл, который затем встраивается в Node, чтобы сообщить ему, где найти установленные пакеты. Начиная с версии 2, Plug'n'Play становится стратегией по умолчанию для установки JavaScript-проектов.
См. также: Plug'n'Play
PnP
См. Plug'n'Play
Портал
Портал — это зависимость, которая использует portal: протокол, указывающий на пакет, расположенный на диске.
В отличие от link: протокола (который может указывать на любое местоположение, но не может иметь зависимости), Yarn настроит свою карту зависимостей таким образом, что зависимый пакет сможет получить доступ к файлу, на который указывает портал, и сам портал сможет получить доступ к своим зависимостям. Даже к взаимозависимостям!
Проект
Термин «проект» используется для описания всех деревьев проекта, которые относятся к одному дереву зависимостей.
См. также: Рабочие пространства
Диапазон
Диапазон — это строка, которая, в сочетании с именем пакета, может использоваться для выбора нескольких версий одного пакета. Диапазоны обычно следуют semver, но могут использовать любые поддерживаемые Yarn протоколы.
См. также: Протоколы
Ссылка
Ссылка — это строка, которая, в сочетании с именем пакета, может использоваться для выбора одной единственной версии одного пакета. Ссылки обычно следуют semver, но могут использовать любые поддерживаемые Yarn протоколы.
См. также: Протоколы
Резольвер
Резольверы — это компоненты, ответственные за преобразование дескрипторов в локаторы и извлечение манифестов пакетов из локаторов пакетов. Например, резольвер npm проверяет доступные версии в реестре npm и возвращает все кандидаты, которые удовлетворяют требованиям semver, а затем запрашивает реестр npm для извлечения всех метаданных, связанных с выбранным разрешением.
См. также: Архитектура См. также: Resolver интерфейс
Область
Области — термин, унаследованный от реестра npm; они используются для описания набора пакетов, которые принадлежат одному субъекту. Например, все пакеты Yarn, связанные с версией 2, принадлежат области berry в реестре npm. Области традиционно предваряются символом @.
Пакет-синглтон
Пакет-синглтон — это пакет, который инициализируется один раз в дереве зависимостей.
Хотя пакеты-синглтоны не являются первоклассными гражданами, их можно легко создать с помощью зависимостей от сверстников, используя одну из их свойств: поскольку пакеты, от которых зависят зависимости от сверстников, гарантированно являются теми же экземплярами, что и те, которые используются их непосредственным предком, использование зависимостей от сверстников по всей ветви зависимостей до ближайшего рабочего пространства гарантирует, что будет создан только один экземпляр пакета — делая его фактически пакетом-синглтоном.
См. также: Зависимость от сверстника
Переходная зависимость
Переходная зависимость — это зависимость пакета, от которого вы зависите.
Представьте себе случай react. Ваше приложение зависит от него (вы указали его в своём манифесте), поэтому это прямая зависимость. Но react также зависит от prop-types! Это делает prop-types переходной зависимостью, поскольку вы её не декларируете напрямую.
Отсоединённый пакет
С Yarn PnP большинство пакетов хранятся внутри своих архивов zip, а не распаковываются на диске. Затем архивы монтируются на файловой системе во время выполнения и прозрачно доступны. Монтирования являются только для чтения, чтобы архивы не повреждались, если что-то попытается записать в них.
В некоторых случаях сохранение пакета только для чтения может быть затруднено (например, когда пакет перечисляет скрипты postinstall — шаги сборки часто потребуют создания артефактов сборки, что делает папки только для чтения непрактичными). Для таких ситуаций Yarn может распаковать определённые пакеты и сохранить их в своих отдельных папках. Такие пакеты называются «отсоединёнными».
Пакеты отсоединяются в нескольких сценариях:
- явным образом, установив поле
unpluggedвtrue - явным образом, когда пакет устанавливает своё поле
preferUnpluggedвtrue - неявным образом, когда пакет перечисляет скрипты postinstall
- неявным образом, когда пакет содержит файлы нативных библиотек
Виртуальный пакет
Поскольку пакеты с зависимостями от сверстников фактически определяют горизонт возможных наборов зависимостей, а не один статический набор зависимостей, пакет с зависимостями от сверстников может иметь несколько наборов зависимостей. Когда это происходит, пакет необходимо инициализировать хотя бы один раз для каждого такого набора.
Поскольку в Node-среде модули JS инициализируются на основе своего пути (файл никогда не инициализируется дважды для любого данного пути), а PnP гарантирует, что пакеты устанавливаются только один раз в любом данном проекте, единственный способ инициализировать эти пакеты несколько раз — предоставить им несколько путей, всё ещё ссылаясь на то же расположение на диске. Именно здесь пригодятся виртуальные пакеты.
Виртуальные пакеты — это специализированные экземпляры пакетов с зависимостями от сверстников, которые кодируют набор зависимостей, которые должен использовать этот конкретный экземпляр. Каждый виртуальный пакет получает уникальный путь к файловой системе, что гарантирует, что скрипты, на которые он ссылается, будут инициализированы с их соответствующим набором зависимостей.
В прошлом виртуальные пакеты реализовывались с помощью символических ссылок, но это недавно изменилось, и теперь они реализуются через слой виртуальной файловой системы. Это позволяет избежать необходимости создания сотен запутанных символических ссылок, улучшая совместимость с Windows и предотвращая проблемы, которые возникали бы при вызовах realpath сторонними инструментами.
Рабочее пространство
В общем случае рабочие пространства — это функция Yarn, используемая для работы над несколькими проектами, хранящимися в одном репозитории.
В контексте терминологии Yarn, рабочие пространства — это локальные пакеты, которые напрямую относятся к проекту.
См. также: Пакеты
См. также: Рабочие пространства
Дерево разработки
Дерево разработки — это частное рабочее пространство, которое добавляет новые дочерние рабочие пространства к текущему проекту.
См. также: Рабочие пространства
Yarn
Yarn — это инструмент командной строки, используемый для управления средами программирования. Написанный на Javascript, он в основном используется вместе с другими проектами Javascript, но обладает возможностями, которые делают его пригодным для использования в различных ситуациях.
Установки без нулевого шага
См. также: Установка без нулевого шага
© 2016–present Yarn Contributors
Licensed under the BSD License.
https://v3.yarnpkg.com/advanced/lexicon