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

时间:2014-04-28 10:15:51

标签: node.js express npm sails.js waterline

我有一个名为“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安装主分支?

2 个答案:

答案 0 :(得分:44)

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

根据NPM存储库info page on Sails,最新的NPM托管版本为0.9.16,而current GitHub version0.10.0-rc3

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

  

将网址作为依赖关系

     

Git网址可以是以下形式:

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可以是任何标记,sha或分支,可以作为git checkout的参数提供。默认值为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 repo,只需使用:

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

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

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

答案 1 :(得分:1)

我有类似的问题。通过NPM Registry我试图从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回答一样。