Почему неудовлетворенные одноранговые зависимости не разрешаются при использовании yarn link?

#node.js #npm #yarnpkg #npm-link

#node.js #npm #yarnpkg #npm-link

Вопрос:

У меня есть 2 пакета узлов: foo-service и foo-commons .

foo-commons является зависимостью от foo-service .

Во время разработки каждый раз, когда происходят изменения foo-commons , чтобы использовать их, foo-service я копирую скомпилированный исходный код из foo-commons в foo-service/node_modules/foo-commons/ :

 cp -r ./foo-commons/dist ./foo-service/node_modules/foo-commons/dist
 

Недавно я наткнулся на лучший способ, который заключается в использовании yarn link . Ссылка

yarn link создает sylink от ./foo-service/node_modules/foo-commons to ./foo-commons/

При этом сборка typescript завершается успешно без ручного копирования файлов, как раньше.

Однако, когда я запускаю foo-service , я получаю сообщение об ошибке module not found :

 Error: Cannot find module 'mongoose'
/foo-service/dist/server.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:610:15)
at Function.Module._load (internal/modules/cjs/loader.js:526:27)
at Module.require (internal/modules/cjs/loader.js:666:19)
at require (internal/modules/cjs/helpers.js:16:16)
at Object.<anonymous> (/foo-commons/node_modules/@typegoose/typegoose/lib/typegoose.js:6:18)
at Module._compile (internal/modules/cjs/loader.js:759:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:770:10)
at Module.load (internal/modules/cjs/loader.js:628:32)
at Function.Module._load (internal/modules/cjs/loader.js:555:12)
at Module.require (internal/modules/cjs/loader.js:666:19)
 

Эта ошибка возникает только при использовании yarn link .

Модуль в ошибке mongoose представляет собой неразрешенную одноранговую зависимость для foo-commons :

 warning " > @typegoose/typegoose@7.3.1" has unmet peer dependency "mongoose@^5.9.22".
 

Почему неудовлетворенные одноранговые зависимости не разрешаются при использовании yarn link ?

Комментарии:

1. Я использую ту же ошибку npm link . Мои peerDependnecies из библиотеки не устанавливаются. Когда я использую file:<path_to_my_tgz> все работает так, как ожидалось.

Ответ №1:

Я нашел обходной путь для решения этой проблемы.

Сначала в project, whicch использует мою библиотеку, которую я установил npm-install-linked , затем я создал пользовательский скрипт для установки:

  1. дерево проекта:
 my_lib:
-- peerDependencies:
-----a
-----b

my_project:
----package.json:
--------file:../../my_lib_/dist/my_lib
 
  1. Используя npm-install-linked я устанавливаю одноранговую зависимость в <my_library>/node_modules (включая одноранговые зависимости):
 my_project:
---node_modules
------my_lib:
---------node_modules:
------------a
------------b

 
  1. Я копирую это node_modules в корень my_project node_modules , пропуская существующие библиотеки:
 cp -R -n node_modules/my_lib/node_modules/* node_modules/
 
  1. И удаление node_modules библиотеки, чтобы избежать ошибок сборки:
 rm -rf node_modules/my_lib/node_modules

 

После этой операции дерево проекта:

 my_project:
---node_modules:
-----a
-----b
-----my_lib

 

Это грязный обходной путь, но мне не удалось сделать это лучше. Если вы знаете, как это сделать лучше, дайте мне знать!