我的问题类似于这一个。
项目依赖于驻留在私有存储库中的Git模块:
"dependencies": {
"mymod": "git+https://mygitserver:8443/scm/od/mymod.git",
...
}这样做的目的是使其成为快照依赖项,因此每当修改任何mymod代码时,项目都会删除最新版本。
问题是,我应该正确地使用什么命令将我的项目更新为模块的最新版本?
我发现唯一起作用的是:
rm -rf node_modules/mymod
npm install就像@Vishwanath在他的问题中指出的那样,单独运行npm install什么也不做(考虑到它已经运行了一次),因为模块已经安装好了。npm upgrade是不合适的,因为我还依赖于许多其他模块,而且我不想将它们全部升级到更新的版本。
我想我可以显式地修改mymod,然后在新版本发生变化时用新版本更新我的本地package.json,但是这会创建一个持续的维护任务。
npm似乎有足够的信息来确定何时需要升级,因为node_modules/mymod/package.json包含最后一个已知的头版本,它可以与当前的头版本进行比较:
"gitHead": "b63f0df8ef...",
"_resolved": "git+https://mygitserver:8443/scm/od/mymod.git#b63f0df8ef..."npm有一种像这样处理快照依赖关系的首选方法吗?
发布于 2018-09-22 15:30:16
更新-2021年-开发和生产中的专用包
在我的新项目中,我尽了最大的努力来编写我的代码,以适应生产和开发两个方面的最小变化,使用我的私有包是一个挑战。
我希望在本地处理我的包,所以所有更改都可以立即应用,而不必每次都像下面的解决方案那样手动更新我的包,但是在生产中,我希望它在执行npm install时从我的git中安装一个特定版本的包。
因此,我所做的是使用两个不同的依赖项,一个用于生产,一个用于开发。
package.json
"dependencies": {
"package-name": "git+ssh://git@bitbucket.com:*git package/path*.git#1.0.0",
},
"devDependencies": {
"package-name-dev": "file:*package path*"
}现在,在开发过程中,在使用这两个包之后,每次调用主包时,我都需要使用dev包,而不是对所有文件执行大量的if(isDev){...}。
我使用了模块别名包,它允许我将一个模块化名一次,并且它将被应用于整个项目。
在app.js的顶端
const isDev = (process.env.NODE_ENV === 'development'),
isProd = (process.env.NODE_ENV === 'production');
if (isDev) {
const moduleAlias = require('module-alias');
moduleAlias.addAlias('package-name', 'package-name-dev');
}就是这样,现在,当我使用const pack = require('package-name')时,它将需要开发的本地包(dev),以及生产上的主包。
Note --在主包中,我在git末尾使用了一个标记(#1.0.0),我在多个项目上使用了相同的包,我希望确保控制每个项目的包版本,这样我就可以手动测试旧项目上的最新版本了,不会有任何损坏。
原始答案-手动更新包
我找不到更好的方法来做到这一点,最后我在package.json中添加了一个脚本,手动安装我需要的包。
向package.json添加一个脚本,该脚本将更新所需的包:
"scripts": {
"update:packages": "npm install git+ssh://git@GIT_URL_HERE#master"
}虽然这与手动更新包是一样的,正如@chris在对另一个答案的评论中说的那样,但这要容易得多,可以与以下内容一起使用:
npm run update:packages备注--最后的#master标记将安装主分支,这不是最优的,但它允许您安装包的最后一个版本,而无需每次手动更改标记。
Update -如果您需要这个来进行开发,并且私有存储库中的包是您在本地工作的东西(就像我一样),您可以简单地将包链接到项目,所有更改都将立即显示,而无需重新安装它,关于链接的更多信息
cd /path/to/working/dir
npm link ../path/to/package/dir更新2如果使用Docker,npm link将无法在码头内工作,这是因为link正在设置到本地npm文件夹的软链接。为了避免这种情况,您需要在内设置软链接。
发布于 2020-08-07 08:59:06
您可以手动更新包。
npm update mymod这将用最新的散列提交更新您的包-lock.json。
发布于 2021-01-24 22:15:21
我尝试在package.json中更新版本号,但它仍然没有更新包。似乎唯一的办法是每次删除旧包。
https://stackoverflow.com/questions/35597754
复制相似问题