npm install 不在 GitHub 上安装最新版本

Posted

技术标签:

【中文标题】npm install 不在 GitHub 上安装最新版本【英文标题】:npm install not installing latest version on GitHub 【发布时间】:2014-06-13 20:10:12 【问题描述】:

我有一个名为“sails-mongo”的模块,我想使用以下命令将其更新到最新版本:

npm update sails-mongo --save

我也试过卸载然后重新安装。我试过sails-mongo@latestsails-mongo@beta

问题: package.json (https://github.com/balderdashy/sails-mongo/blob/master/package.json) 文件在 GitHub 上的当前版本 (ma​​ster):

"dependencies": 
  "async": "~0.2.9",
  "lodash": "~2.4.1",
  "mongodb": "1.4.2",
  "waterline-errors": "~0.10.0"
,

在更新中

"dependencies": 
  "async": "0.2.10",
  "underscore": "1.5.2",
  "underscore.string": "2.3.3",
  "mongodb": "~1.3.23"
,

我获得主分支的唯一方法是使用命令npm install git+https://github.com/balderdashy/sails-mongo

sails-mongo@latest为什么不安装master分支?

【问题讨论】:

因为 NPM 不是从 Github 安装的,它是从 NPM 安装的。 package.json 中的 repository 键仅标识 NPM 页面上显示的存储库。 +1 但不确定我明白了,让我换个方式问:NPM 怎么知道要安装哪个版本? 包独立于 Github 发布到 NPM。当开发者发布包时,它会从package.json 获取版本号。 NPM 存储这些几乎就像 Github 一样。当你运行 NPM install 时,它总是会安装最新版本,但如果你在 package.json 中指定包,你可以添加你想要安装的版本。 【参考方案1】:

我遇到了类似的问题。通过 NPM 注册表,我试图从我在 GitHub 中看到的一个项目中获取最新信息,如下所示:

//package.json
"devDependencies": 
    "foo-package": "^3.3.0",

但是我从npm install 得到的代码(在node_modules/ 文件夹中观察到)不是我在 GitHub 存储库的主分支中看到的。我很困惑;因为两者不匹配。

我最终找到了:https://docs.npmjs.com/cli/view,它揭示了 NPM 注册表对特定存储库了解的一些信息(版本和日期)。

// Console example
npm view foo-package

在确认我想要从 GitHub 存储库的主分支中获取的内容不在 NPM 注册表中之后,我最终改变了我的方法 Git URLs as Dependencies,就像 @apsillers 回答的那样。

【讨论】:

除了@apsillers 答案之外,您的答案中还有哪些额外信息? 我写这篇文章已经 2 年多了。但是,@apsillers 答案的附加价值似乎是 调试工具 以了解在 npm 上发布的内容。因此工具:docs.npmjs.com/cli/view【参考方案2】:

默认情况下,NPM 依赖项是从 NPM 存储库中提取的。作者必须手动将其软件的新版本上传到 NPM 存储库,因此 NPM 上托管的代码的“@latest”版本与任何地方(例如 GitHub)上存在的代码的最新版本不同。

根据 NPM 存储库的 info page on Sails,最新的 NPM 托管版本是 0.9.16,而 current GitHub version 是 0.10.0-rc3

如果您想让您的项目依赖于特定 Git 存储库的特定分支或提交(而不是 NPM 存储库中托管的版本),NPM 开发人员已经包含了一个明确的机制来实现这一点,详细在package.json docs中的“Git URLs as Dependencies”中:

Git URL 作为依赖项

Git url 可以是以下形式:

git://github.com/user/project.git#commit-ish
git+ssh://user@hostname:project.git#commit-ish
git+ssh://user@hostname/project.git#commit-ish
git+http://user@hostname/project/blah.git#commit-ish
git+https://user@hostname/project/blah.git#commit-ish

commit-ish 可以是可以作为参数提供给git checkout 的任何标记、sha 或分支。默认为master

其实还是把use a Github.com repo作为依赖更简单:

从 1.1.65 版开始,您可以将 GitHub 网址引用为 "foo": "user/foo-project"。例如:


  "name": "foo",
  "version": "0.0.0",
  "dependencies": 
    "express": "visionmedia/express"
  

因此,要使用 Sails GitHub 存储库,只需使用:

"dependencies": 
  "sails": "balderdashy/sails-mongo",
  ...

要使用截至 2014 年 4 月 28 日在 GitHub 上存在的 Sails 的确切状态,请使用:

"dependencies": 
  "sails": "git://github.com/balderdashy/sails-mongo#b9cdce9a48",
  ...

【讨论】:

所以实际上没有办法安装latest stable release而不每次都去github并专门检查哪个release/branch/etc。你需要吗? @Andrey 你能不能只使用 repo 的 master 分支来获取最新的稳定版本?如果 repo 维护者不断创建新分支并切换哪个分支具有最新版本,那么是的,您需要跟上维护者的 shell 游戏,了解哪个分支是最新的。 并非总是如此,即npm install github:jquery/jquery-ui 安装最新的可用版本 (github.com/jquery/jquery-ui/releases)... @Andrey 有趣!这种行为不需要在我见过的任何地方记录下来。 (我在去年写这个答案时链接到的页面已经消失了,我认为它当时没有提到任何关于发布的内容。)我不确定 npm 何时使用发布与主控。 (如果你能找到它,那将是一个很好的补充或可能单独的答案。如果你找不到任何东西,它可能是一个很好的单独问题。)

以上是关于npm install 不在 GitHub 上安装最新版本的主要内容,如果未能解决你的问题,请参考以下文章

如何用gitbook写文档并存到github上

在 npm install 上发现 4 个漏洞

Npm install 在 github 操作中失败

npm install

npm install 基本参数

npm init,npm -y, npm install --save,npm install --save-dev