当包位于子文件夹中时,是否可以从github安装npm包?
例如,我们有Microsoft BotBuilder存储库: https://github.com/Microsoft/BotBuilder
但是我需要在子文件夹中安装包" Node / core /": https://github.com/Microsoft/BotBuilder/tree/master/Node/core/
那么如何用npm安装呢?
答案 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
脚本正在运行。
一步一步:
mkdir BotBuilder
cd BotBuilder
git init
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 ..
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子文件夹中安装软件包。
答案 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,以及安装它的命令。