来自github repo子文件夹的npm install package

时间:2016-08-28 18:46:18

标签: git github npm

当包位于子文件夹中时,是否可以从github安装npm包?

例如,我们有Microsoft BotBuilder存储库: https://github.com/Microsoft/BotBuilder

但是我需要在子文件夹中安装包" Node / core /": https://github.com/Microsoft/BotBuilder/tree/master/Node/core/

那么如何用npm安装呢?

5 个答案:

答案 0 :(得分:24)

添加到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脚本正在运行。

一步一步:

  1. 将文件夹设为克隆仓库:mkdir BotBuilder
  2. 进入文件夹:cd BotBuilder
  3. init git repo:git init
  4. 将git origin设置为Microsoft / BotBuilder repo:git remote add -f origin https://github.com/Microsoft/BotBuilder.git
  5. 启用sparse checkoutgit config core.sparseCheckout true
  6. Node/core添加到结帐列表:echo "Node/core" >> .git/info/sparse-checkout
  7. 拉回了部分回复:git pull --depth=1 origin master
  8. 进入您的应用文件夹:cd ..
  9. 安装BotBuilder:npm i ./BotBuilder/Node/core/

答案 1 :(得分:2)

可能稍微偏离主题,仍然与问题相关

https://git-scm.com/book/en/v2/Git-Tools-Submodules

Git子模块是git repos,可以在其他repos中使用(以下称为Supermodules)。每个子模块都具有通常的分支特征和标签,每个超级模块都是一个版本控制的可插拔组件,可以单独处理或与超级模块一起开发。

一些有用的命令

要添加子模块,请在超级模块中运行以下命令:

git submodule add <url-to-submodule-repo>

子模块仍然必须初始化并从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

答案 2 :(得分:1)

将指向子文件夹的github链接粘贴到gitpkg中。然后,您可以将其与yarn或npm一起使用,以从github子文件夹中安装软件包。

https://gitpkg.now.sh/

答案 3 :(得分:0)

@Tomasz Jakub Rup的回答启发。我更新了他的示例,并指向他的示例所基于的3.0分支,而是使用了新的git特性,即sparse-checkout。此功能将节省时间/带宽,因为它不需要提前克隆整个存储库,而只会获取您指示的内容。但是,许多服务器不支持--filter选项来节省大量空间,但是--depth1在许多情况下仍然会减少带宽。

我使用了.tmp_npm文件夹来最大程度地减少覆盖,并且由于是隐藏文件而可能被.git忽略。

"scripts": {
  "postinstall": "mkdir .tmp_npm; cd .tmp_npm; git init; git clone --filter=blob:none --no-checkout --depth 1 --sparse -b 3.0 https://github.com/Microsoft/BotBuilder.git; cd BotBuilder/; git sparse-checkout init --cone; git sparse-checkout add Node/core; git checkout; cd ../..; npm i .tmp_npm/BotBuilder/Node/core/"
  ...
},

答案 4 :(得分:0)

如果包源托管在 GitHub 上,您可以像这样使用 GitPkg

# using npm:
npm install https://gitpkg.now.sh/<user>/<project>/<subdir>?<commit-ish>
# using yarn:
yarn add https://gitpkg.now.sh/<user>/<project>/<subdir>?<commit-ish>

对于您的特定情况,URL 将是这样的:

https://gitpkg.now.sh/Microsoft/BotBuilder/Node/core?master

在他们的 site 中有一个很好的类似向导的表单,可以帮助构建 URL,以及安装它的命令。