Использование одноранговых зависимостей с локальными (file: ../ some-lib) зависимостями - PullRequest
0 голосов
/ 12 июня 2018

У меня есть монорепо, в котором много микросервисов.Есть некоторые функции / классы библиотечного типа, которые я хочу сделать доступными для любого микросервиса, которому это необходимо.Однако, если этот пакет библиотеки объявляет одноранговую зависимость, одноранговая зависимость не обнаруживается при запуске кода из вещи, которая зависит от библиотеки.

Рассмотрим эту структуру репо:

  • lib
    • some-library (peerDepends on foo)
      • index.js (требуется foo)
      • node_modules будут пустыми
  • services
    • some-service (зависит от foo и some-library)
      • index.js (требуется some-library)
      • node_modules будет иметь:
      • foo
      • some-library будет символической ссылкой на ../../lib/some-library

При запуске node services/some-service/index.js вы получите сообщение об ошибке "Не удается найти модуль 'foo'", исходящее из lib/some-library/index.js.

Предположительно, это происходит потому, что узел просматривает только lib/some-library/node_modules илюбая папка node_modules, которая находится в каталоге предка.Но так как этот код был запущен из services/some-service (в качестве рабочего каталога) и из-за символической ссылки в services/some-service/node_modules, я бы ожидал, что это сработает.

Вот репозиторий, к которому можно легко клонироватьсм. проблему: https://github.com/jthomerson/example-local-dependency-problem

git clone git@github.com:jthomerson/example-local-dependency-problem.git    
cd example-local-dependency-problem    
cd services/some-service    
npm install    
node index.js    

Я вижу только два решения:

  • Не использовать peerDependencies внутри библиотеки
  • Установить каждую равноправную зависимость вкорень проекта для локальной разработки и тестирования.

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

1 Ответ

0 голосов
/ 12 июня 2018

Как насчет добавления флага --preserve-symlinks?Например:

node --preserve-symlinks index.js 

Вот ссылка на документы

...