Работа с зависимостями в JavaScript
NPM
Создание файла package-lock.json
- Инициализируйте проект:
- Установите зависимости:
Поддержка механизма NPM package alias
Механизм NPM package alias позволяет устанавливать пакеты под разными именами, что удобно для одновременного использования нескольких версий библиотеки, замены зависимости без изменения её имени в коде и работы с форками.
Вместо стандартного указания версии используется синтаксис, явно задающий, какой пакет и его версию установить под нужным именем. Это упрощает тестирование, обновления и совместимость зависимостей.
В package.json в секции dependencies может быть указана следующая запись:
Консольный агент Johnny корректно обрабатывает эту запись, распознавая, что @babel/legacy-core – это alias для @babel/core версии 7.12.0. В ходе анализа зависимостей учитывается оригинальный пакет, предотвращая ошибки, связанные с несуществующими именами.
Поддержка механизма NPM overrides
Механизм NPM overrides позволяет изменить версии транзитивных зависимостей. Это полезно в случаях необходимости замены зависимости с известной уязвимостью, либо замены зависимости на форк.
В секции overrides файла package.json может быть указана следующая запись:
В package-lock.json будет единственная версия пакета foo:
Консольный агент Johnny корректно обрабатывает эту запись, распознавая пакет foo версии 1.0.0.
Поддержка механизма NPM workspaces
Механизм NPM workspaces позволяет централизованно управлять несколькими пакетами.
В package.json в секции workspaces может быть указана следующая запись:
В таком случае агент Johnny будет обрабатывать корневой package.json и все package.json всех пакетов из workspaces как единое целое.
PNPM
Создание файла pnpm-lock.yaml
- Инициализируйте проект:
- Установите зависимости:
Поддержка механизма PNPM package alias
Механизм PNPM package alias позволяет устанавливать пакеты под разными именами, что удобно для одновременного использования нескольких версий библиотеки, замены зависимости без изменения её имени в коде и работы с форками.
Вместо стандартного указания версии используется синтаксис, явно задающий, какой пакет и его версию установить под нужным именем. Это упрощает тестирование, обновления и совместимость зависимостей.
В package.json в секции dependencies может быть указана следующая запись:
Консольный агент Johnny корректно обрабатывает эту запись, распознавая, что lodash-old – это alias для lodash версии 3.10.1. В ходе анализа зависимостей учитывается оригинальный пакет, предотвращая ошибки, связанные с несуществующими именами.
Поддержка механизма PNPM overrides
Механизм PNPM overrides позволяет изменить версии транзитивных зависимостей. Это полезно в случаях необходимости замены зависимости с известной уязвимостью, либо замены зависимости на форк.
В секции pnpm/overrides файла package.json может быть указана следующая запись:
В pnpm-lock.yaml версия пакета example-package будет не ниже 1.3.0:
Консольный агент Johnny корректно обрабатывает эту запись, распознавая пакет example-package версии 1.3.0.
Поддержка механизма PNPM workspaces
Механизм PNPM workspaces позволяет централизованно управлять несколькими пакетами.
В pnpm-workspace.yaml расположенном рядом с корневым package.json быть указана следующая запись:
В таком случае агент Johnny будет обрабатывать корневой package.json и все package.json всех пакетов из workspaces как единое целое.
Yarn
Создание файла yarn.lock
- Инициализируйте проект:
- Установите зависимости:
Поддержка механизма Yarn package alias
Механизм Yarn package alias позволяет устанавливать пакеты под разными именами, что удобно для одновременного использования нескольких версий библиотеки, замены зависимости без изменения её имени в коде и работы с форками.
Вместо стандартного указания версии используется синтаксис, явно задающий, какой пакет и его версию установить под нужным именем. Это упрощает тестирование, обновления и совместимость зависимостей.
В package.json в секции dependencies может быть указана следующая запись:
В yarn.lock формируется запись:
Консольный агент Johnny корректно обрабатывает эту запись, распознавая, что lodash-old – это alias для lodash версии 3.10.1. В ходе анализа зависимостей учитывается оригинальный пакет, предотвращая ошибки, связанные с несуществующими именами.
Поддержка механизма 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. Консольный агент корректно идентифицирует данный механизм и анализирует именно финальный пакет.
Фиксация версии транзитивной зависимости
Для фиксации версии через механизм resolutions в package.json добавляется следующая запись. В данном примере версия пакета http-signature фиксируется на 1.3.4.
Соответствующие данному пакету записи в файле yarn.lock будут следующими:
При установке в сборке будет использована версия http-signature 1.3.4. Консольный агент анализирует финальную версию пакета.
Фиксация версии при множественных зависимостях
Для фиксации версии при наличии нескольких зависимостей через механизм resolutions в package.json добавляется следующая запись. В данном примере версия пакета yaml фиксируется на 2.2.2.
Соответствующие данному пакету записи в файле yarn.lock будут следующими:
При установке в сборке будет использована версия 2.2.2. Консольный агент анализирует только зафиксированную в resolutions версию пакета.
Bun
Создание файла bun.lock
В случае, если в проекте уже используется бинарный формат bun.lockb для создания bun.lock нужно использовать следующую команду:
