Comments 1
Вредная на самом деле статья) по крайней мере на долгий срок для нетривиальных монорепо
pnpm + shamefully hoist - убивается смысл изоляции и контроля зависимостей в каждом пакете.
общий tsconfig, общий тулинг итп - по итогу вместо относительно слабо связанных модулей имеем пакеты с неявными и даже общими зависимостями.
Вместо этого вы или используйте turborepo/nx или делайте модули независимыми.
Как у нас:
pnpm (дефотлный isolated node-linker), кстати npm тоже экспериментальный линкер такой делает
единственное обязательство любого пакета - быть валидным NPM пакетом, который можно использовать/публиковать
каждый пакет сам решает как тестироваться, линтоваться итп (но обязующие guidelines присутствуют)
на долгий срок это выгодно т.к. тулинг и подходы в некоторых пакетах может устаревать (с разделением помогает pnpm)
задачу с последовательным build/watch решает pnpm (умеет запускать скрипты у зависимостей)
один legacy пакет может билдится ts4, другой ts5 или Vite - определяется необходимостью.
общие зависимости на общий jest config итп лучше не иметь (vitest прекрасен) или в крайнем случае складывать в отдельный пакет же и импортировать как зависимость.
необязательные скрипты вроде test/lint запускаются перед публикацией (если есть). но опять же каждый решает сам что использовать, как тестироваться. кто-то vitest, кто-то jest
ещё из тулзов changsets, depcheck для контроля зависимостей,
npx nx graph
По итогу получается монорепо в котором все пакеты максимально слабо связаны, зависимости явно прописаны и видны через npx nx graph
.
P.S. Бандлер react-native не поддерживает pnpm isolated node linker. Но это не повод использовать shamefully hoist, подойдет "hoisted"
Монорепозиторий на TypeScript вместо подорожника. Как мы все сломали и сделали лучше