Совместное использование кода между приложениями Node

Наше приложение состоит из двух компонентов: API и клиент. Оба являются независимыми приложениями Node. Несмотря на то, что API не имеет никаких компонентов веб-интерфейса, кроме документации, они оба по-прежнему используют некоторые общие файлы, такие как компоненты Jade, нормализующие CSS, служебные модули и, что наиболее важно, определения схемы и модели Mongoose для взаимодействия с MongoDB. Я действительно не хочу привыкать к рабочему процессу, где я сначала изменяю API, а затем копирую измененные файлы на клиент или наоборот, поэтому было бы здорово найти жизнеспособное решение для этого.

Как лучше всего делиться разным кодом между приложениями Node?

Просматривая веб-страницы, я натолкнулся на пару решений, но в данном случае ни одно из них не работает.

Одним из решений является создание модуля узла из общих файлов и его синхронизация между приложениями с NPM, но это означает, что я (и возможные будущие разработчики) должен знать, какие файлы являются частью общего модуля, и требовать их с участиемrequire('node_modules/mongo/schemas/example.js') вместоrequire('mongo/schemas/example.js') например. Поскольку гипотетически может быть сотни общих файлов, было бы невозможно запомнить, является ли файл общим или нет, особенно для новых разработчиков.

Другое решение - создать подмодуль git из общего модуля. Это было бы прекрасно, если бы я только мог включить путь субмодуля в обязательные пути узла, поэтому в случае, если он не найдет нужный файл в ожидаемом месте (скажем,mongo/schemas/example.js), это будет выглядеть в общем подмодуле (common/mongo/schemas/example.js). Это было бы здорово, так как это позволило бы перезаписать общий файл "локальной" версией. Это вроде как работает Magento. Проблема здесь в том, что Node не позволяет редактировать требуемые пути (по крайней мере, по крайней мере, предположительно, это было возможно до Node 0.5), так что это облом.

Третье решение - жестко объединить содержимое общего репозитория с корнем приложения. В этом решении нет действительно непреодолимых проблем, но я просто чувствую, что это плохая практика. В конце концов, это сделало бы невозможным редактирование общих файлов через приложение, поскольку нет способа выборочно помещать общие файлы в общий репозиторий git. Таким образом, в основном это решение сделает рабочий процесс еще более утомительным: все изменения в общих файлах необходимо будет скопировать вручную в общую кодовую базу, передать на удаленный git и затем скопировать в другое приложение. Так что это решение определенно мне не подходит.

Кажется, что второе решение - единственный (и лучший) вариант, который у меня есть, если вы, ребята, не придумаете лучший вариант (на который я действительно надеюсь: D). Если кто-нибудь знает способ изменить пути к узлам, я был бы очень признателен.

Ответы на вопрос(3)

Ваш ответ на вопрос