Я использую lerna для управления многопакетным монорепо.
Это хорошо работает в моей среде разработки, где я могу работать с несколькими пакетами, которые зависят друг от друга, и код продолжает работать.
Однако, я столкнулся с некоторыми проблемами при создании этого кода для производства.
По сути, проблема в том, что когда я компилирую свой код, я получу несколько модулей cjs, которые имеют
require('some-dependency')
Зависимость будет существовать как символическая ссылка в папке node_modules
и так работает в моей среде разработки.
Однако, если я хочу скопировать node_modules в образ докера, это не сработает, так как Docker просто игнорирует символические ссылки.
То, что я хотел бы сделать, - это иметь команду, которая проверяет node_modules
на наличие символических ссылок, и если они существуют, то просто скопируйте все файлы в конкретные файлы.
Возможно ли это? Какая терминология?
Вы можете добавить опцию разыменования в команду cp. Разыменование приведет к тому, что cp скопирует связанный файл, а не simlink.
cp --dereference --recursive node_modules/* dest_dir/
И в качестве альтернативы:
cp -L -r node_modules/* dest_dir/