Учитывая, что проект lib/
dir не должен быть зарегистрирован в Git, потому что содержащиеся в нем файлы являются производными файлами (из процесса сборки). При установке пакета из проекта github (например, во время разработки) lib/
dir не будет существовать, поэтому, если main
поле package package.json
указывает (например, на lib/index.js
, пакет не может быть скомпилирован при импорте потому что эти файлы не существуют в хранилище и, следовательно, в пакете, установленном в node_modules
. Это означает, что пакет должен быть собран (так же, как это было бы до выпуска), только на этот раз локально, чтобы каталог lib
(или любые другие файлы, созданные в процессе сборки) были добавлены в каталог модуля.
Предполагая, что в поле scripts
файла package.json
есть сценарий build
, можно ли настроить пакет на автоматический запуск в ситуации, когда он установлен только с github? Если нет, каков наилучший подход к обеспечению его сборки при установке с github?
В настоящее время существуют prepublish
, prepublishOnly
и prepare
ловушек жизненного цикла, но ни одна из них не дает ответа на эту проблему, поскольку они не позволяют разграничить источник установки. Короче говоря, да, они позволяют вам строить на установке, но они не позволяют вам строить только с github. Существует не только причина для принудительной сборки, когда люди устанавливают из npm, но, что более важно, зависимости для разработки не будут установлены (например, babel
который имеет решающее значение для сборки).
Я знаю одну стратегию для решения этой проблемы:
- Форк/филиал репо
- строить локально
- удалите
lib/
dir из.gitignore
и проверьте его. - установить модуль с вашего форка/ветки
- Когда вы будете готовы к PR/rebase, добавьте
lib/
dir в.gitignore
и удалите dir из git.
Но это далеко от идеала. Я думаю, что это может быть автоматизировано с помощью Githook, хотя. Таким образом, каждое нажатие на освоение проекта также создает и переносит в отдельную ветку.
На NPM Github есть закрытая проблема без разрешения - просто много людей, которые хотят найти решение. Из этого вопроса ясно, что использование prepare
не является ответом.
Мой пример использования заключается в том, что я разрабатываю модуль, который используется в ряде других проектов. Я хочу использовать последнюю версию модуля без необходимости выпускать релиз для NPM всякий раз, когда я обновляю кодовую базу - я бы предпочел выдавать меньшее количество релизов, когда я буду готов, но мне все равно нужно использовать любую последнюю версию библиотеки. находится на Github.
Примечание: я также обратился в службу поддержки NPM по этому вопросу, и я добавлю их ответ, если я его получу.