Pull to refresh

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"

Sign up to leave a comment.

Articles