Контекст
Я создаю инфраструктуру React UI (например, Material UI, Elasti c UI и т.д. c.). В моем репозитории есть как источники компонентов, так и веб-сайт документации. Однако при публикации на NPM я упаковываю только исходники (а не веб-сайт). Heroku, с другой стороны, потребуется полный репозиторий, поскольку документы относятся к источникам напрямую.
Почему?
Я видел это во многих репозиториях, включая Material UI. Кажется, что у них несколько проектов в одном репозитории. Мне отчасти понравилась эта идея, потому что она избавляет меня от необходимости иметь 2 отдельных репозитория: один с исходными кодами, а другой, который, скорее всего, будет устанавливать источники через NPM, вынуждая меня продолжать публиковать свои источники, чтобы использовать их в документы. Таким образом, я также могу разрабатывать свои компоненты непосредственно в документации, чтобы они всегда были синхронизированы c.
Проблема
Документам нужен сервер для работы на Heroku. Итак, я сделал небольшой с Express, который обслуживает папку publi c и будет запускаться Heroku. Поскольку dev-зависимости удаляются после сборки, мне нужно поместить express
в зависимости от пакета (в моем package.json
). Однако я не хочу, чтобы Express зависел от моего пакета NPM, поскольку он там не нужен и просто увеличил бы его.
Итак, как мне исключить Express (и другие зависимости, используемые только в документации) из моего пакета NPM, сохранив их для приложения Heroku?
«Взлом», который я использую
. Я создал сценарий prepublishOnly
, который удаляет зависимости из package.json
, и сценарий postpublish
, который их повторно добавляет. Таким образом, зависимости, которые мне не нужны для NPM, удаляются перед публикацией (поэтому теоретически они не будут отображаться в окончательном пакете), но они останутся для приложения Heroku. Это работает. Однако я считаю это очень хакерским (и потенциально опасным) решением.
Структура папок
Project/ # Everything in here is pushed to Heroku
package.json
dist/ # Compiled TypeScript files of the src/ folder. Only this is published to NPM (along with the standard files like README)
src/
components/
docs/
public/
server/
Заключение
Я почти уверен, что делаю что-то не так с моим хаком и что есть некоторые инструменты, которые помогут мне добиться этого чистым и безопасным способом, но я не смог их найти. Я попытался посмотреть, что делает Material UI, но не уверен, что понимаю, как все это происходит на их стороне.