如何安装NPM软件包的先前确切版本?


914

我使用nvm下载节点v0.4.10,并安装了npm以与该版本的节点一起使用。

我正在尝试使用安装Express

npm install express -g

我得到一个错误,表示需要节点版本> = 0.5.0。

好吧,这很奇怪,因为我遵循此处使用节点v0.4.10 的node + express + mongodb教程的说明,因此我假设express可用于节点v0.4.10。如果我的假设是正确的,我如何告诉npm获取适用于我的设置的版本?


7
您为什么不只更新Node版本?可以肯定的是,除了坏的行为之外,还应该有更多的好选择。
法布里西奥磨砂

1
有时这不是一个选择。如果他使用nvm进行降级,则可能是有原因的,例如其他组控制了他必须使用的可执行节点版本。
fool4jesus

Answers:


1580

如果您必须安装较旧版本的软件包,只需指定它

npm install <package>@<version>

例如: npm install express@3.0.0

您还可以将--save标志添加到该命令以将其添加到package.json依赖项,或者--save --save-exact如果需要在package.json依赖项中指定确切的版本,则。

install命令在此处记录:https : //docs.npmjs.com/cli/install

如果不确定软件包的哪些版本可用,可以使用:

npm view <package> versions

并且npm view也可以用于查看有关包装的其他信息。https://docs.npmjs.com/cli/view


4
我相信这会安装与之匹配的最接近的主版本,因此它可能不是您所期望的stackoverflow.com/a/22345808/1074400
Aakil Fernandes

2
@AakilFernandes如果指定精确版本,将安装精确版本。如果指定语义版本范围,则可能会得到不完全匹配的结果。在这方面,install命令没有什么独特之处。
Bret Copeland

6
npm view <package> versions -json查看每个版本,避免在包含多个版本的列表末尾使用省略号。
TheDarkIn1978 '17

5
如果使用npm install express@3.0.0,则不会获得确切的版本3.0.0,而是会获得最新的3.xx版本。要获取特定版本,您必须使用npm install express@3.0.0 --save-exact。请参阅此博客文章:60devs.com/npm-install-specific-version.html
Patrick Hund,

5
@PatrickHund不,npm install express@3.0.0完全为您提供3.0.0版本。npm install express@^3.0.0会为您提供最新的3.xx --save-exact会影响将其写入packages.json的方式,我已经在答案中谈到了。另请注意,--save-exact必须与--save或组合使用--save-dev- 仅靠单独使用是不够的。
Bret Copeland

93

这很容易。只需编写此代码,例如:

npm install -g npm@4.6.1

要么:

npm install -g npm@latest    // For the last stable version
npm install -g npm@next      // For the most recent release

1
感谢您的latestnext版本标签!
吉米·阿达罗

@inaps您可能会添加一个注释,该-g标志专门用于您要全局安装的软件包,因为许多用户将转到此页面,仅复制/粘贴而未意识到他们将如何影响其软件包生态系统。我们都是“那个家伙”
Jacksonkr

73

首先删除旧版本,然后运行字面上以下几点:

npm install express@3.X

并且稳定或最近

npm install -g npm@latest    // For the last stable version
npm install -g npm@next      // For the most recent release

12
这是X某个数字版本号的文字还是替代品?
基思·汤普森

7
那是一个/或一个问题,不是一个是/否问题。我试过了npm install express@3.X,它似乎起作用了。这是功能还是偶然的原因npm解析版本号?
基思·汤普森

3
@KeithThompson是的,是的!呵呵,开个玩笑...这是npm解析的方式,请参阅:docs.npmjs.com/misc/semver#x-ranges-12x-1x-12-
gonz

3
@gonz:这是一个文字X
基思·汤普森

1
我只是想解决为什么这对您有用。我不知道Saurabh的初衷或您要做什么。3.X表示> = 3.0和<4.0。
gonz



1

我有解决此类问题的一般方法,这也可能会有所帮助,特别是在克隆存储库以在本地运行它们时,但需要对版本进行更多分析。

使用该软件包,npm-check-updates我验证未在其最新可用版本中声明的软件包的版本(根据package.json文件),如图所示(https://www.npmjs.com/package/npm-check -更新):

在此处输入图片说明

有了这些信息,我们可以验证不同软件包的更新状态,并决定要升级/降级的软件包以及不升级/降级的软件包。

假设我们决定更新所有列出的软件包,则可以使用ncu -u仅修改package.json文件的命令。跑npm install以更新已安装的软件包和package-lock.json。

然后,根据存储库的要求,我们可以优化所需的内容,npm view <package> versions并使用和 安装特定版本 npm install <package>@<version>


1

npm install -g npm@version

您要降级的位置

npm install -g npm@3.10.10


但是如果我需要本地化吗?我需要放--save吗?
AlexNikonov

是的,您也有..它将在本地下载软件包。
Lakshay Sharma

@AlexNikonov省略-g(进行全局安装,然后将其放置在您当前的项目dir中/node_modules),是的,--save或者--save-dev获取一个条目package.json
Frank Nocke

0

您可以使用以下命令来安装以前版本的npm软件包:

npm install packagename@version


-3

在Ubuntu上,您可以尝试此命令。

sudo npm cache clean -f
sudo npm install -g n
sudo n stable 

特定版本:sudo n 8.11.3代替sudo n stable

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.