GitHub上的npm安装未安装最新版本

43

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

npm update sails-mongo --save

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

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

"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不能安装主分支?


7
由于NPM不会从Github安装,它会从NPM安装。在package.json中的repository键只是标识一个存储库,该存储库将显示在NPM页面上。 - Ben Fortune
1
+1,但不确定我是否理解您的意思,让我换个方式问:NPM如何知道要安装哪个版本? - user2867106
2
包是独立于Github发布到NPM的。当开发人员发布包时,它会从package.json中获取版本号。NPM将每个版本都存储得几乎像Github一样。当您运行NPM install <package>时,它将始终安装最新版本,但如果您在package.json中指定了该软件包,则可以添加要安装的版本。 - Ben Fortune
2个回答

49
默认情况下,NPM依赖项从NPM存储库中提取。作者必须手动将其软件的新版本上传到NPM存储库,因此在NPM上托管的"@latest"版本与存在于任何地方(例如GitHub)的最新代码版本不同。
根据NPM存储库关于Sails的信息页面,最新的NPM托管版本是0.9.16,而当前的GitHub版本0.10.0-rc3

如果您希望您的项目依赖于特定Git存储库的特定分支或提交(而不是托管在NPM存储库上的版本),NPM开发人员已经包含了一个明确的机制来允许这一点,详细信息请参见package.json文档中的 "Git URLs as Dependencies":

Git URLs as Dependencies

Git urls can be of the form:

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

The commit-ish can be any tag, sha, or branch which can be supplied as an argument to git checkout. The default is master.

事实上,将Github.com仓库用作依赖项更加简单:

As of version 1.1.65, you can refer to GitHub urls as just "foo": "user/foo-project". For example:

{
  "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",
  ...
}

1
所以实际上没有办法安装“最新稳定版”,而不必每次都去 GitHub 并特别检查您需要哪个版本/分支等? - Andrey
@Andrey,你不能只使用存储库的主分支来获取最新稳定版本吗?如果存储库维护者不断创建新分支并切换哪个分支具有最新版本,那么是的,你需要跟上维护者的这种“戏法”,找出哪个分支是最新的。 - apsillers
并非总是这样,即npm install github:jquery/jquery-ui会安装最新可用版本(https://github.com/jquery/jquery-ui/releases)... - Andrey
@Andrey 有趣!我没有在任何地方看到需要记录这种行为。(我去年写这篇答案时链接的页面已经消失了,我不认为当时它有关于发布的任何说明。)我不确定npm何时使用发布版本和主分支。(如果你能找到,那将是一个很好的补充或可能是单独的答案。如果你找不到任何信息,那可能会成为一个很好的单独的问题。) - apsillers

3

我有类似的问题。通过NPM Registry,我尝试获取GitHub上某个项目的最新版本,如下:

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

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

最终,我找到了https://docs.npmjs.com/cli/view,其中显示了NPM Registry对特定存储库的某些信息(版本和日期)。

// Console example
npm view foo-package

在确认我想要的GitHub仓库主分支不在NPM Registry中后,最终我改变了我的方法(将Git URL作为依赖项),就像@apsillers的回答一样。


除了@apsillers的回答,你的答案中还有什么额外的信息呢? - Michael Freidgeim
1
我写这篇文章已经超过两年了。然而,@apsillers的回答所增加的价值在于调试工具,可以帮助理解npm上发布的内容。因此,这个工具是:https://docs.npmjs.com/cli/view - Michael R

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接