Обеспечение общих зависимостей в монорепозитории

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

Какие есть варианты, чтобы заставить все пакеты использовать одну и ту же версию определенных зависимостей? Есть ли способ добиться этого без написания собственных скриптов?

Хочу предотвратить такую ​​ситуацию:

my-repo/
  packages/
    pkg-A/
      package.json
        "address-validator": 1.1.0
    pkg-B/
      package.json
        "address-validator": 1.2.0

Я знаю, что вы можете использовать lerna add или lerna run для одновременного добавления / обновления, но как предотвратить то, что человек неосознанно сделает свой пакет уникальным?


person adanilev    schedule 01.03.2019    source источник
comment
попробуйте npx lerna bootstrap --hoist --strict   -  person chatoo2412    schedule 09.01.2020


Ответы (1)


Я только что заметил одно хорошее решение этой проблемы в приложении facebook create-response-app. Они импортируют (все?) Внешние зависимости в react-dev-utils и экспортируйте их оттуда. Затем все остальные пакеты, такие как сценарии реакции, импортируйте зависимости из react-dev-utils.

Это хорошо, потому что вам нужно беспокоиться только об использовании последней версии одного пакета (например, response-dev-utils), чтобы использовать последнюю версию всех вещей, которые вы хотите контролировать. Кроме того, он гибкий, потому что вы можете переопределить одну из зависимостей, напрямую импортировав другую версию.

Так могло получиться так:

my-repo/
  packages/
    my-deps/
      pkg1.js // <--- module.exports = require("pkg1");
      package.json
        "pkg1": 1.2.0
    foo/
      index.js // <--- const pkg1 = require("my-deps/pkg1")
      package.json
        "my-deps": 1.1.0
person adanilev    schedule 21.08.2019