Пакет установки 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