首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使npm从Git回购中获取最新的软件包

使npm从Git回购中获取最新的软件包
EN

Stack Overflow用户
提问于 2016-02-24 09:11:19
回答 5查看 12.8K关注 0票数 15

我的问题类似于这一个

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

代码语言:javascript
复制
"dependencies": {
  "mymod": "git+https://mygitserver:8443/scm/od/mymod.git",
  ...
}

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

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

我发现唯一起作用的是:

代码语言:javascript
复制
rm -rf node_modules/mymod
npm install

就像@Vishwanath在他的问题中指出的那样,单独运行npm install什么也不做(考虑到它已经运行了一次),因为模块已经安装好了。npm upgrade是不合适的,因为我还依赖于许多其他模块,而且我不想将它们全部升级到更新的版本。

我想我可以显式地修改mymod,然后在新版本发生变化时用新版本更新我的本地package.json,但是这会创建一个持续的维护任务。

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

代码语言:javascript
复制
"gitHead": "b63f0df8ef...",
"_resolved": "git+https://mygitserver:8443/scm/od/mymod.git#b63f0df8ef..."

npm有一种像这样处理快照依赖关系的首选方法吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2018-09-22 15:30:16

更新-2021年-开发和生产中的专用包

在我的新项目中,我尽了最大的努力来编写我的代码,以适应生产和开发两个方面的最小变化,使用我的私有包是一个挑战。

我希望在本地处理我的包,所以所有更改都可以立即应用,而不必每次都像下面的解决方案那样手动更新我的包,但是在生产中,我希望它在执行npm install时从我的git中安装一个特定版本的包。

因此,我所做的是使用两个不同的依赖项,一个用于生产,一个用于开发。

package.json

代码语言:javascript
复制
"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的顶端

代码语言:javascript
复制
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添加一个脚本,该脚本将更新所需的包:

代码语言:javascript
复制
"scripts": {
   "update:packages": "npm install git+ssh://git@GIT_URL_HERE#master"
}

虽然这与手动更新包是一样的,正如@chris在对另一个答案的评论中说的那样,但这要容易得多,可以与以下内容一起使用:

代码语言:javascript
复制
npm run update:packages

备注--最后的#master标记将安装主分支,这不是最优的,但它允许您安装包的最后一个版本,而无需每次手动更改标记。

Update -如果您需要这个来进行开发,并且私有存储库中的包是您在本地工作的东西(就像我一样),您可以简单地将包链接到项目,所有更改都将立即显示,而无需重新安装它,关于链接的更多信息

代码语言:javascript
复制
cd /path/to/working/dir
npm link ../path/to/package/dir

更新2如果使用Docker,npm link将无法在码头内工作,这是因为link正在设置到本地npm文件夹的软链接。为了避免这种情况,您需要在内设置软链接。

票数 17
EN

Stack Overflow用户

发布于 2020-08-07 08:59:06

您可以手动更新包。

代码语言:javascript
复制
npm update mymod

这将用最新的散列提交更新您的包-lock.json。

票数 10
EN

Stack Overflow用户

发布于 2021-01-24 22:15:21

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35597754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档