我的问题类似于
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升级是不合适的,因为我也依赖于很多其他模块,我不想将它们全部升级到更新的版本.
我想我可以显式地对mymod进行版本化,然后在新版本发生变化时使用新版本更新我的本地package.json,但这会创建一个持续的维护任务.
似乎npm有足够的信息来确定何时需要升级,因为node_modules / mymod / package.json包含最后一个已知的头版本,它可以与当前的头版本进行比较:
"gitHead": "b63f0df8ef...",
"_resolved": "git+https://mygitserver:8443/scm/od/mymod.git#b63f0df8ef..."
npm是否有像这样处理快照依赖的首选方法?
最佳答案 我找不到更好的方法来做到这一点,我最终在package.json中添加了一个脚本,手动安装我需要的包,
将一个脚本添加到package.json,它将更新所需的包:
"scripts": {
"update:packages": "npm install git+ssh://git@GIT_URL_HERE#master"
}
虽然这与手动更新软件包相同,正如@chris在另一个答案的评论中所说,这更容易,可以用于:
npm run update:packages
注意 – 最后的#master将安装此标记的最后更改(主分支),不是最佳的,但这允许您安装包而无需每次手动更改标记.
更新 – 如果您需要这个用于开发,并且私有存储库中的包是您在本地工作的东西(比如我),您可以简单地将框架链接到项目,所有更改将立即显示而无需重新安装, more info on link:
cd /path/to/working/dir
npm link ../path/to/package/dir
更新2
如果您使用Docker,npm链接将不会转发到docker,这是因为链接正在设置到本地npm文件夹的软链接.
为避免这种情况,您需要在泊坞窗内设置软链接.