当npm包位于子文件夹中时,是否可以从github安装npm包?
例如,我们有Microsoft BotBuilder存储库: https://github.com/Microsoft/BotBuilder
但我需要安装子文件夹"Node/core/"中的软件包: https://github.com/Microsoft/BotBuilder/tree/master/Node/core/
那么我该如何使用npm安装它呢?
当npm包位于子文件夹中时,是否可以从github安装npm包?
例如,我们有Microsoft BotBuilder存储库: https://github.com/Microsoft/BotBuilder
但我需要安装子文件夹"Node/core/"中的软件包: https://github.com/Microsoft/BotBuilder/tree/master/Node/core/
那么我该如何使用npm安装它呢?
请添加到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
添加到checkout列表中:echo "Node/core" >> .git/info/sparse-checkout
git pull --depth=1 origin master
cd ..
npm i ./BotBuilder/Node/core/
# 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
他们的网站上有一个很好的向导式表单,可以帮助构建URL并安装命令。
我使用了一个.tmp_npm文件夹来最小化覆盖,并且由于是隐藏文件,可能被.gitignored忽略。
"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/"
...
},
https://git-scm.com/book/en/v2/Git-Tools-Submodules
Git子模块是可以在其他仓库中使用的git存储库(以下简称超级模块)。每个子模块都具有通常的分支功能和标签,好处在于每个超级模块都是可版本控制的、可插拔的组件,可以单独工作或与超级模块一起开发。git submodule add <url-to-submodule-repo>
git submodule foreach 'git checkout -b featureA'
yarn add <file>
将其作为依赖项添加。 - Evgeniya Manolova