让npm从Git repo获取最新的包

时间:2016-02-24 09:11:19

标签: node.js git npm

我的问题类似于this one

项目依赖于Git模块,该模块驻留在私有托管的存储库中:

"dependencies": {
  "mymod": "git+https://mygitserver:8443/scm/od/mymod.git",
  ...
}

目的是使其成为快照依赖项,因此每当修改任何mymod代码时,项目都会下拉最新版本。

问题是,我应该使用什么命令将项目更新到最新版本的模块?

我发现的唯一有用的是:

rm -rf node_modules/mymod
npm install

单独运行npm install不会做任何事情(假设它已经运行过一次),正如@Vishwanath在他的问题中所指出的那样,因为模块已经安装。 npm upgrade是不合适的,因为我也依赖于很多其他模块,我不想将它们全部升级到更新的版本。

我想我可以明确地版本mymod,然后随着新版本的更改更新我的本地package.json,但这会创建一个持续的维护任务。

似乎npm有足够的信息来确定何时需要升级,因为node_modules/mymod/package.json包含最后一个已知的头版本,它可以与当前的头版本进行比较:

"gitHead": "b63f0df8ef...",
"_resolved": "git+https://mygitserver:8443/scm/od/mymod.git#b63f0df8ef..."

npm是否有像这样处理快照依赖关系的首选方式?

4 个答案:

答案 0 :(得分:2)

我找不到更好的方法,最终我在package.json中添加了一个脚本来手动安装所需的软件包,

将脚本添加到package.json中,以更新所需的软件包:

"scripts": {
   "update:packages": "npm install git+ssh://git@GIT_URL_HERE#master"
}

虽然这与手动更新程序包相同,如@chris在其他答案的评论中所述,但这要容易得多,并且可以由以下人员使用:

npm run update:packages

注意-最后的#master将安装此标签的最后一次更改(master分支),虽然不是最佳选择,但这使您无需每次手动更改标签即可安装软件包。 / p>

更新-如果您需要进行开发,而私有存储库中的包是您在本地(例如我)工作的东西,则只需将框架链接到项目,所有更改都将立即显示,无需重新安装,more info on link

cd /path/to/working/dir
npm link ../path/to/package/dir

更新2 如果您使用Docker,npm链接将不会转发到docker,这是因为该链接设置了到您本地npm文件夹的软链接。 为避免这种情况,您将需要在Docker内部设置软链接。

答案 1 :(得分:1)

您可以手动更新软件包。

npm update mymod

这将使用最新的哈希提交更新package-lock.json。

答案 2 :(得分:0)

您需要更新mymod中package.json中的版本,以使npm安装更新后的代码。

答案 3 :(得分:0)

我尝试更新 package.json 中的版本号,但它仍然没有更新包。似乎唯一的方法就是每次都删除旧包。