Как исключить некоторые зависимости из публикации с NPM? - PullRequest
0 голосов
/ 19 июня 2020

Контекст

Я создаю инфраструктуру 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, но не уверен, что понимаю, как все это происходит на их стороне.

...