#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
, затем я создал пользовательский скрипт для установки:
- дерево проекта:
my_lib:
-- peerDependencies:
-----a
-----b
my_project:
----package.json:
--------file:../../my_lib_/dist/my_lib
- Используя
npm-install-linked
я устанавливаю одноранговую зависимость в<my_library>/node_modules
(включая одноранговые зависимости):
my_project:
---node_modules
------my_lib:
---------node_modules:
------------a
------------b
- Я копирую это
node_modules
в корень my_projectnode_modules
, пропуская существующие библиотеки:
cp -R -n node_modules/my_lib/node_modules/* node_modules/
- И удаление
node_modules
библиотеки, чтобы избежать ошибок сборки:
rm -rf node_modules/my_lib/node_modules
После этой операции дерево проекта:
my_project:
---node_modules:
-----a
-----b
-----my_lib
Это грязный обходной путь, но мне не удалось сделать это лучше. Если вы знаете, как это сделать лучше, дайте мне знать!