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@latest
和sails-mongo@beta
。
问题: package.json (https://github.com/balderdashy/sails-mongo/blob/master/package.json) 文件在 GitHub 上的当前版本 (master):
"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
中指定包,你可以添加你想要安装的版本。我遇到了类似的问题。通过 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 上安装最新版本的主要内容,如果未能解决你的问题,请参考以下文章