Пакет установки npm из подпапки github repo
Можно ли установить пакет npm из github, когда пакет находится внутри подпапки?
Например, у нас есть репозиторий Microsoft BotBuilder:
https://github.com/Microsoft/BotBuilder
Но мне нужно установить пакет внутри подпапки "Node/core/":
https://github.com/Microsoft/BotBuilder/tree/master/Node/core/
Итак, как я могу установить его с помощью npm?
Ответы
Ответ 1
Добавить в package.json
:
...
"scripts": {
"postinstall": "mkdir BotBuilder; cd BotBuilder; git init; git remote add -f origin https://github.com/Microsoft/BotBuilder.git; git config core.sparseCheckout true; echo \"Node/core\" >> .git/info/sparse-checkout; git pull --depth=1 origin master; cd ..; npm i ./BotBuilder/Node/core/"
...
},
...
postinstall
script запускается после установки пакета.
И шаг за шагом:
- Сделать папку для клонирования репо:
mkdir BotBuilder
- введите в папку:
cd BotBuilder
- init git repo:
git init
- установить git происхождение в репозиторий Microsoft/BotBuilder:
git remote add -f origin https://github.com/Microsoft/BotBuilder.git
- включить разреженная проверка:
git config core.sparseCheckout true
- добавить
Node/core
в список проверок: echo "Node/core" >> .git/info/sparse-checkout
- тянуть часть репо:
git pull --depth=1 origin master
- введите в папку приложения:
cd ..
- установить BotBuilder:
npm i ./BotBuilder/Node/core/
Ответ 2
Может быть немного не по теме, просто по-прежнему актуальным для вопроса
https://git-scm.com/book/en/v2/Git-Tools-Submodules
Git Подмодули - это git repos, которые вы можете использовать в других репозиториях (в дальнейшем называемых Supermodules). С каждым подмодулем, имеющим обычный набор особенностей и тегов ветвей, преимущество исходит от каждого супермодуля, являющегося контролируемым версиями, подключаемыми компонентами, которые могут обрабатываться отдельно или развиваться вместе с супермодулем.
Несколько полезных команд
Чтобы добавить подмодуль, вы запускаете внутри своего супермодуля следующее:
git submodule add <url-to-submodule-repo>
Подмодуль все еще необходимо инициализировать и извлечь из репо:
git submodule init
git submodule update
Супермодуль с подмодулями может быть клонирован и все подмодули выбраны путем выполнения:
git clone --recursive <url-to-supermodule>
Вы можете вывести восходящие изменения в ветвь субмодуля, запустив следующее внутри каталога подмодулей:
git fetch
Затем выполните обновление для обновления локального кода:
git merge
Ниже перечисляются и объединяются для всех подмодулей в вашем супермодуле:
git submodule update --remote
Если вы хотите отслеживать определенную ветвь подмодуля, вы можете использовать следующее:
git config -f .gitmodules submodule.<my-submodule>.branch fantastic_new_implementation
Если вы работали над своими супермодулями и подмодулями, и вы подталкиваете свой супермодуль, изменения, внесенные в подмодули, будут существовать только локально, а те, с которыми вы сотрудничаете, не будут знать об этих изменениях.
Следующая команда проверяет, были ли ваши подмодули нажаты ПЕРЕД тем, как пытаться нажимать ваш супермодуль
git push --recurse-submodules=check
Наконец, вот полезная команда ForEach, которая позволяет нам запускать команду для каждого подмодуля
git submodule foreach 'git checkout -b featureA