Работа с зависимостями в JavaScript¶
NPM¶
Создание файла package-lock.json
¶
- Инициализируйте проект:
- Установите зависимости:
Поддержка механизма NPM package alias¶
Механизм NPM package alias позволяет устанавливать пакеты под разными именами, что удобно для одновременного использования нескольких версий библиотеки, замены зависимости без изменения её имени в коде и работы с форками.
Вместо стандартного указания версии используется синтаксис, явно задающий, какой пакет и его версию установить под нужным именем. Это упрощает тестирование, обновления и совместимость зависимостей.
В package.json
в секции dependencies может быть указана следующая запись:
Консольный агент Johnny корректно обрабатывает эту запись, распознавая, что @babel/legacy-core – это alias для @babel/core версии 7.12.0. В ходе анализа зависимостей учитывается оригинальный пакет, предотвращая ошибки, связанные с несуществующими именами.
Yarn¶
Создание файла yarn.lock
¶
- Инициализируйте проект:
- Установите зависимости:
Поддержка механизма Yarn selective dependency resolution¶
Yarn поддерживает избирательное разрешение версий через поле resolutions
в package.json
, что позволяет задавать конкретные версии зависимостей без редактирования yarn.lock
.
Этот механизм полезен, если вам нужно обновить подзависимость, которая не обновляется часто, исправить уязвимость в транзитивной зависимости или зафиксировать версию из-за проблемного обновления.
CodeScoring поддерживает обработку данного механизма в консольном агенте Johnny. Вот несколько сценариев его работы:
Замена пакета¶
Для замены пакета через механизм resolutions, в package.json
добавляется следующая запись. В данном примере пакет parcel/watcher заменяется на пакет favware/skip-dependency.
Соответствующая данному пакету запись в файле yarn.lock
будет следующей:
При установке в сборке используется пакет favware/skip-dependency версии 1.2.2. Консольный агент корректно идентифицирует данный механизм и анализирует именно финальный пакет.
"@parcel/watcher@npm:@favware/skip-dependency@latest":
version: 1.2.2
resolution: "@favware/skip-dependency@npm:1.2.2"
Фиксация версии транзитивной зависимости¶
Для фиксации версии через механизм resolutions в package.json
добавляется следующая запись. В данном примере версия пакета http-signature фиксируется на 1.3.4.
Соответствующие данному пакету записи в файле yarn.lock
будут следующими:
При установке в сборке будет использована версия http-signature 1.3.4. Консольный агент анализирует финальную версию пакета.
http-signature@1.3.4, http-signature@~1.2.0:
version "1.3.4"
resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.3.4.tgz#a65b41193110b222364e776fd1ac848655a0e2f0"
Фиксация версии при множественных зависимостях¶
Для фиксации версии при наличии нескольких зависимостей через механизм resolutions в package.json
добавляется следующая запись. В данном примере версия пакета yaml фиксируется на 2.2.2.
Соответствующие данному пакету записи в файле yarn.lock
будут следующими:
dependencies:
yaml: ^1.10.0
yaml: ^2.2.1
yaml: ^1.7.2
yaml: ^1.10.2
yaml: ^2.3.4
yaml: 2.3.1
yaml: ^2.1.1
При установке в сборке будет использована версия 2.2.2. Консольный агент анализирует только зафиксированную в resolutions
версию пакета.