Как я могу успешно заблокировать зависимости узловых модулей в монорепозитории?

Я работаю над проектом с открытым исходным кодом, который в настоящее время использует lerna, чтобы помочь управлять одним репозиторием с несколькими пакетами. Пока все хорошо, за исключением того, что время от времени что-то ломается, потому что в настоящее время мы ничего не упаковываем в термоусадочную пленку. Я пытался сделать какую-то монорепозиционную версию термоусадочной упаковки, чтобы мы не зависели от всех наших зависимостей (удивительно, как часто все идет не так в середине выпуска!), Но натолкнулся на небольшую стену и задавался вопросом, на правильном ли я вообще пути.

Изначально я надеялся использовать термоусадочную пленку npm, с которой я был знаком по предыдущим проектам. К сожалению, lerna, похоже, не поддерживает термоусадочную пленку.

План Б заключался в использовании пряжи, которая после некоторых начальных трудностей, казалось, пошла нормально после перехода на использование рабочих пространств пряжи - по крайней мере, я думаю, что yarn install --frozen-lockfile делал то, что я хотел.

К сожалению, кроме блокировки зависимостей, yarn, похоже, не помогает - все работает с npm и lerna, но рабочие области lerna и yarn, похоже, вызывают проблемы с модулями разрешения (даже с решением чего-то в том же каталоге, что сбивает с толку).

Возможно, переход на пряжу в любом случае является излишним, поэтому я начал задаваться вопросом, не было бы лучшей идеей более свежие версии npm и package-lock.json. К сожалению, похоже, что потребуется кое-что исправить с lerna, и с этого момента я начинаю интересно узнать, сколько на самом деле добавляет Лерна. Может быть, поможет удаление lerna?

Итак, tl; dr, есть ли у кого-нибудь хороший способ заблокировать зависимости модулей в монорепозитории?


person James Taylor    schedule 29.09.2017    source источник


Ответы (2)


Я бы предложил просто использовать точное управление версиями; поэтому в ваших package.json файлах, где есть номера версий для зависимостей, таких как ^3.4.2, измените его на 3.4.2. ^ (или ~) перед числом указывает на диапазон версий. Это можно сделать с помощью параметра сохранить точную конфигурацию: --save-exact флаг или поместив save-exact=true в .npmrc файл в репо. lerna add также поддерживает точный вариант.

Надеюсь, это поможет!

person Evan Lovely    schedule 22.10.2018
comment
Это действительно обходной путь, который мы использовали, к сожалению, он лишь ненамного лучше, поскольку маловероятно, что все ваши зависимости будут указывать точные версии своих зависимостей. Ближе всего к ответу я подошел с Rush - rushjs.io - к сожалению, я работал над другими вещами, поэтому я не Невозможно перенести старый проект, чтобы убедиться, что он действительно работает. Тем не менее, это выглядело многообещающе, и я бы с удовольствием опробовал его в будущих моно репозиториях. - person James Taylor; 29.10.2018

yarn - это готовый к работе менеджер пакетов, который изначально поддерживает монорепозицию :)

При использовании yarn workspaces нет необходимости одновременно использовать lerna как менеджер монорепозитория.

Вы можете использовать другие возможности lerna, если хотите, но нет причин использовать lerna для установки монорепозиториев (которые уже используют yarn).

Если при установке / управлении monorepo с помощью yarn возникают определенные ошибки, добавьте их в вопрос.

Примечания:

  • --frozen-lockfile ничего не делает с пряжей monorepo. У yarn есть нерешенный вопрос, который, я думаю, не решится в ближайшее время.
person Stav Alfi    schedule 23.10.2020
comment
Я предполагаю, что пряжа немного изменилась с 2017 года, но проблемы с --frozen-lockfile не кажутся обнадеживающими. Пока что Rush, похоже, работает нормально с этим монорепозиторием - ›github.com/hyperledger/fabric-chaincode-node - person James Taylor; 02.11.2020