Фрагмент какого-либо случайного блокировки файла
Lockfiles На клиентах UDE Package Manager (NPM) клиенты не являются новой темой, пряжа нарушила менеджеры по пакетам узла с термином под названием детерминизм Предоставление нового файла, сгенерированного после установки под названием Yarn.lock для контактов и замораживания зависимостей с целью избежать несоответствий в нескольких установках.
Если вы используете частный реестр как Verdaccio Может быть, касается заправки файла блокировки в репо, используя личный или локальный домен, как URL реестра, а затем кто-то еще из-за его окружающей среды не сможет получить блокноты, определенные в файле блокировки.
Это просто проблема, что все менеджеры пакетов должны решить, в настоящее время не усердно видеть компании, используя свой собственный реестр, чтобы провести частные пакеты или использовать Verdaccio Функция питания Восстание Чтобы разрешить зависимости от более одного реестра, используя одну одну конечную точку.
Как выглядит файл блокировки?
Файл блокировки выглядит по-разному на основе менеджера пакета, который вы используете, в случае NPM в качестве примера выглядит так
"[@babel/code-frame](http://twitter.com/babel/code-frame)@7.0.0-beta.44": version "7.0.0-beta.44" resolved "[http://localhost:4873/@babel%2fcode-frame/-/code-frame-7.0.0-beta.44.tgz#2a02643368de80916162be70865c97774f3adbd9](http://localhost:4873/@babel%2fcode-frame/-/code-frame-7.0.0-beta.44.tgz#2a02643368de80916162be70865c97774f3adbd9)" dependencies: "[@babel/highlight](http://twitter.com/babel/highlight)" "7.0.0-beta.44"
Снаптеп выше – это просто небольшая часть этого огромного файла, который никто не осмеливается иметь дело, когда возникают конфликты. Тем не менее, я просто хочу, чтобы вы сосредоточились на поле под названием разрешено Отказ
Простой пример с verdaccio как localhost
Давайте представим, что вы используете Verdaccio и пряжа Для местных целей и ваша конфигурация реестра указывает на.
yarn config set registry http://localhost:4873/
После запуска установки установка пряжи генерируется файл блокировки, и каждая зависимость будет иметь поле, называемое, которое точно указывает на URI, где Tarball следует загрузить в будущей установке. Это означает, что менеджер пакета полагается на такие URI, несмотря ни на что.
В случае PNPM файл блокировки выглядит немного по-другому, мы подробно увидим это по этой статье.
// yarn.lock math-random@^1.0.1: version "1.0.1" resolved "[http://localhost:4873/math-random/-/math-random-1.0.1.tgz#8b3aac588b8a66e4975e3cdea67f7bb329601fac](http://localhost:4873/math-random/-/math-random-1.0.1.tgz#8b3aac588b8a66e4975e3cdea67f7bb329601fac)"
Давайте представим вас, что может захотеть изменить свой домен, где размещен ваш реестр, и разрешенное поле еще указывает на предыдущее местоположение, и ваш менеджер пакетов больше не сможет разрешить зависимости проекта.
Обычное решение – удалить весь файл блокировки и генерировать новый , но это не практично для крупных команд, поскольку приведет вас к конфликтам между веткой трудно решить.
Итак, Как я могу использовать частный реестр, избегая Разрешенное поле поле? . Все клиенты обрабатывают эту проблему по-другому, давайте посмотрим, как они это делают.
Как разрешенное поле используется …?
NPM использует JSON в качестве формата для файла блокировки. Хорошая новость с NPM @ 5.0.0 игнорирует разрешенное поле На файле Package-lock.json и в основном затруднен к одному, определенному в аргументе .npmrc или через –регистрацию, используя CLI, в случае существует, в противном случае он будет использовать определенные в разрешенном поле.
Жидкая ошибка: внутренний
В наше время вы можете безопасно использовать NPM CLI с файлом блокировки с Verdaccio независимо от URL-адреса, где подается блокбол. Но я бы порекомендовал поделиться локальным файлом .npmrc с реестром, установленным по умолчанию на месте или уведомлять свою команду об этом.
Если вы используете пряжу, история немного отличается. До версии 1.9.4 она пытается разрешить то, что файл блокировки определяет как первый вариант.
Существуют некоторые ссылки на PR, RFC или билеты, которые открылись, если они обсуждают, как правильно решить эту проблему, и если вы готовы погрузиться в эту тему, позвольте мне поделиться самыми интересными потоками, которые вы можете следовать:
- Заменить разрешенное поле на хеш https://github.com/yarnpkg/rfcs/pull/64#issuecomment-414649518
- пряжа не должна включать реестр базового домена https://github.com/yarnpkg/yarn/issues/3330.
- Удалить имя хоста из файлов блокировки https://github.com/yarnpkg/yarn/issues/5892.
TDLR; Пряжа 2.0 планировал решить эту проблему В следующей основной версии на этот день подоконники Обсуждая какой подход, чтобы взять Отказ
https://pnpm.js.org/
PNPM Следует тот же подход, что и другие менеджеры пакетов, генерирующих файл блокировки, но в этом случае файл называется SCRINKWRAP.YAML, который основан на формат ямла.
dependencies: jquery: 3.3.1 parcel: 1.9.7 packages: /@mrmlnc/readdir-enhanced/2.2.1: dependencies: call-me-maybe: 1.0.1 glob-to-regexp: 0.3.0 dev: false engines: node: '\>=4' resolution: integrity: sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g== tarball: /@mrmlnc%2freaddir-enhanced/-/readdir-enhanced-2.2.1.tgz .... registry: '[http://localhost:4873/'](http://localhost:4873/') shrinkwrapMinorVersion: 9 shrinkwrapVersion: 3 specifiers: jquery: ^3.3.1 parcel: ^1.9.7
Пример выше – это просто маленький фрагмент того, как выглядит этот длинный файл, и вы можете наблюдать, что есть поле под названием Реестр добавлено в нижней части файла блокировки, который Был введен, чтобы уменьшить размер файла файла блокировки В некоторых сценариях PNPM решает установить Домен является частью поля Tarball .
PNPM Постараюсь получить зависимости, используя реестр, определенный в LockFile, как пряжа делает Отказ Однако, как обходной путь, если доменные изменения вы должны обновить поле реестра вручную, не сложно делать, но лучше, чем ничего.
PNPM уже открыл билет, чтобы вести эту проблему, я позволю ниже ссылки к нему.
Удалить поле «Реестр» из «Shrinkwrap.yaml» · Выпуск # 1353 · PNPM/PNPM
Оборудование для выплаты реестра
Обычный способ маршрутизации частных пакетов – это зависимости трассы на трассе через другой реестр. Это работает на NPM и PNPM
registry=[https://registry.npmjs.org](https://registry.npmjs.org/) @mycompany:registry=http://verdaccio-domain:4873/
Это существует какая-либо поддержка на момент этого письма.
На мой взгляд, это всего лишь обходной путь, который зависит от количества или принципов, которые вы справляетесь, чтобы решить, стоит ли оно того стоит. Кроме того, Manager Package обойдет эти пакеты, которые не совпадают с объемом и не будут разрешены вашим частным реестром.
Заключение
Менеджеры пакетов Работаете по решению этих проблем с обратной совместимостью и с хорошей производительностью.
На данный момент лучшее решение, если вы поделитесь этой проблемой, является используя NPM, пока другие клиенты не решают, что делать или После рекомендаций выше для каждого клиента .
Оригинал: “https://dev.to/verdaccio/verdaccio-and-deterministic-lock-files-19go”