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

我有一个叫做'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安装master分支?

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

根据Sails上的NPM存储库信息页面 ,最新的NPM托pipe版本是0.9.16而当前的GitHub版本是0.10.0-rc3

如果你想让你的项目依赖特定的分支或者提交一个特定的Git仓库(而不是在NPM仓库上托pipe的版本),NPM开发者已经包含了一个明确的机制来允许这个,在“ Git package.json文档中的URL作为依赖关系 :

Git URL作为依赖关系

Git的URL可以是这样的forms:

 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

实际上, 使用Github.com回购作为依赖关系更容易:

从版本1.1.65开始,你可以把GitHub的URL称为"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", ... } 

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

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

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

我最终发现: https : //docs.npmjs.com/cli/view ,它揭示了NPM Registry注意到某个特定存储库的一些信息(版本和date)。

 // Console example npm view foo-package 

在确认GitHub存储库的主分支所需的内容不在NPMregistry中后,我最终将自己的方法Git URL更改为依赖关系 ,就像@apsillers的回答一样。