Совместное использование модуля несколькими проектами в монорепо - PullRequest
1 голос
/ 03 октября 2019

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

Я хотел бы поделиться некоторым кодом между проектами. Я хочу сохранить их относительную независимость, поэтому я бы предпочел не создавать шаг «сборки» в корневой папке репозитория, а также иметь отдельный шаг сборки каждого проекта. В идеале развертывание каждого проекта должно продолжаться в папке проекта, без необходимости знать о других проектах.

Я знаю, что мог бы создать модуль npm в репозитории и npm link для него из каждого проекта,Это решение, к которому я склоняюсь. Но мне интересно, если у кого-то есть идея получше.

Вот пример того, как выглядит структура каталогов:

/package.json
/docker-compose.yml
/project-1/package.json
/project-2/package.json

Если я выбрал решение npm link, ядобавит что-то вроде папки project-shared и ссылку на нее из project-1 и project-2.

1 Ответ

0 голосов
/ 03 октября 2019

Это решение npm link, которое я использую в данный момент. Это похоже на правильное решение, поэтому я решил опубликовать его в качестве ответа. Я еще не реализовал средства развертывания для этого проекта, поэтому я не знаю, насколько хорошо развертывание будет работать с этим. Я надеюсь, что он развернет связанный модуль вместе со всем остальным.

Структура каталогов проекта выглядит следующим образом:

/package.json
/docker-compose.yml
/project-1/package.json
/project-2/package.json
/project-shared/package.json

В package.json каждого проекта (project-1 и project-2), Я добавил этот сценарий postinstall:

"scripts": {
  "postinstall": "npm link ../project-shared"
},

Таким образом, ссылка будет создана во время обычной настройки проекта.

ПРИМЕЧАНИЕ. По некоторым причинам это не работает при использованииpreinstall скрипт (ссылка не будет создана, хотя, похоже, она запущена). postinstall работает просто отлично.

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

Одна проблема, с которой я столкнулся, заключается в том, что Docker Compose плохо работает со связанными пакетами (папка с символическими ссылками не будет указывать на правильное расположение внутри контейнера). Я исправил это, смонтировав общую папку поверх символической ссылки в папке node_modules. Например, для project-1:

volumes:
  - "./project-1/:/home/node/app:ro"
  - "./project-shared/:/home/node/app/node_modules/project-shared:ro"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...