查找已安装的 npm 包的版本

Find the version of an installed npm package

提问人:Laurent Couvidou 提问时间:6/11/2012 最后编辑:Peter MortensenLaurent Couvidou 更新时间:9/1/2023 访问量:2099537

问:

如何找到已安装的 Node.js 或 npm 的版本?

这将打印 npm 本身的版本:

npm -v <package-name>

这将打印一个神秘的错误:

npm version <package-name>

这将在注册表上打印包版本(即可用的最新版本):

npm view <package-name> version

如何获取已安装的版本

节点.js npm

评论

24赞 David A. Gray 4/30/2018
在我的安装中,“npm -v <package-name>”报告了npm本身的版本。为了在注册表中列出软件包的最新版本,我发现“npm view <package-name> version”可以完成工作。
27赞 Tsagana Nokhaeva 8/27/2019
npm show显示 npm 中的最新内容,未安装
2赞 Nate T 12/21/2020
大多数情况下<module-name> -v 应该可以工作。但是,这取决于包开发人员是否将 cli 功能添加到其包中。
0赞 Jason C 11/15/2022
如果您位于其package.json所在的目录中,则可以使用 .npm pkg get version

答:

3388赞 TheHippo 6/12/2012 #1

用于本地包或全局安装的包。npm listnpm list -g

您可以通过将特定包的名称作为参数传递来查找其版本。例如,将导致:npm list grunt

projectName@projectVersion /path/to/project/folder
└── [email protected]

或者,您可以不将包名称作为参数传递来运行,以查看所有包的版本:npm list

├─┬ [email protected]
│ └── [email protected]
├── [email protected]
├── [email protected]
├─┬ [email protected]
│ ├── [email protected]
│ └── [email protected]
└── [email protected]

您还可以添加参数以列出没有依赖项的已安装包。--depth=0

评论

153赞 guya 4/16/2013
在 mac 和 linux 上,最好添加“ |grep module_name“,以筛选所需的模块版本。尤其是在使用 -g 全局运行时。例如:“npm list -g |grep express“获取已安装的 Express 版本。
111赞 juanpaco 3/17/2014
如果你想要一个特定的模块,你可以像一个例子一样运行它。npm list less-middleware
15赞 Noel 2/13/2016
根据 @guya 对基于 *nix 的系统的提示,在 Windows 上,您可以使用 PowerShell 获得类似的结果:过滤模块。或者,如果您使用的是 Git Bash(或者只是 Bash),则可以使用 .| select-string module_namegrep
16赞 jakub.g 5/17/2016
如果你不记得了,也可以。事实上,许多 npm 命令都有别名,而且,如果你键入命令的子字符串,如果这个子字符串是明确的,它也会起作用;例如,,都是一样的。如果您想要更详细的输出,请尝试(但您可能希望添加到其中)。listnpm lsnpm lsnpm listnpm lisnpm ll--depth=0
7赞 Thayne 11/8/2017
输出不是使用脚本进行分析的最佳选择。真的没有办法获得只是包版本的输出而不必做类似的事情npm list -g | awk -F@ '/<package>/ { print $2}'
1034赞 Patrik Affentranger 5/23/2013 #2

找出哪些包安装在本地没有依赖项的另一种快速方法是使用:

npm list --depth=0

这给了你类似的东西

├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
└── [email protected]

显然,同样的事情也可以全局完成。npm list -g --depth=0

如果您安装了很多软件包,则此方法更清晰。

要找出需要更新的软件包,可以使用 .npm outdated -g --depth=0

评论

16赞 ygaradon 2/28/2014
它给我和没有 --depth 一样
8赞 Howie 6/8/2014
似乎他们已经在 npm 1.4.6 中修复了它。查看 github.com/npm/npm/issues/4733
9赞 Marco Prins 7/1/2015
非常适合搭配| grep <package_name>
5赞 Marco Prins 7/1/2015
@ygaradon 正确,但使它更快,因为它不必递归加载依赖项--depth=0
0赞 EdgeDev 4/10/2019
npm list -g --depth=0对于全局安装的列表模块
291赞 Salvador Dali 7/1/2014 #3

npm view <package> version- 返回包上的最新可用版本。

npm list --depth=0- 返回所有已安装模块的版本,不带依赖项。

npm list- 返回所有模块和依赖项的版本。

最后获取 Node.js 版本:node -v

评论

31赞 Alexander Mills 12/5/2016
npm view <package> 版本,转到 npm 远程注册表,而不是本地文件系统......
0赞 CPHPython 1/17/2018
@AlexanderMills 没错,但把它放在这里可以避免再次搜索。顺便说一句,和都是 npm 视图的别名。npm vnpm infonpm show
0赞 rgantla 7/7/2020
同样,将返回包的所有版本,而不仅仅是最新版本。npm view <package> versions
23赞 Benoit Blanchon 8/13/2014 #4

如果您同意安装 jq,则可以使用 JSON 输出:npm list

npm -j ls <package-name> | jq -r .version

或者,如果你想变得冗长:

npm --json list <package-name> | jq --raw-output '.version'

例如:

npm -j ls ghost | jq -r .version

输出:

0.4.2

此外,全局包的 JSON 格式略有不同,因此需要更改查询。

例如:

npm -j -g ls | jq -r .dependencies.ghost.version

输出:

0.4.2
111赞 David Beckwith 6/24/2015 #5

npm info YOUR_PACKAGE version

例如,

npm info grunt version

0.4.5

评论

176赞 Tanner Semerad 8/23/2015
这不会显示已安装的软件包版本,而只是显示最新的可用版本。
2赞 dannydedog 7/6/2018
同意@tanner-semerad的观点。我检查了 npm 的文档以清除它。 是 的别名,在 npm 的 Docs 中,你会发现: 此命令显示有关包的数据,并将其打印到 outfd 配置引用的流中,默认为 stdout。[...] 如果未指定,则默认版本为“latest”。这就是我投反对票的方式。npm infonpm view
0赞 lofihelsinki 11/29/2018
显示可用的最新版本,而不是最新安装的版本。投了反对票。
2赞 GOXR3PLUS 1/29/2019
npm info YOUR_PACKAGE version唯一有效的:)
1赞 Alexander Klimetschek 6/2/2020
不,如前所述,这将在注册表上显示最新版本。如果你的本地依赖项碰巧是最新版本,这“似乎”有效。但如果不是,则使用此命令将看不到实际安装的(较旧)版本。
9赞 wjordan 10/30/2015 #6

下面是一个可移植的 Unix (using and ) 单行代码,它返回全局安装的 npm 包的版本字符串(改为删除 from to query 本地包):grepsedg-pg

npm ll -pg --depth=0 grunt | grep -o "@.*:" | sed 's/.$//; s/^.//'

输出:

0.4.5
  • 输出一个可解析的字符串,格式如下:npm ll/usr/lib/node_modules/npm:[email protected]:;
  • 该命令提取介于 和 之间的值,包括 和 ;grep@:
  • 该命令将删除周围的字符。sed

评论

0赞 Bbrk24 8/22/2023
对于较新版本的 npm,没有尾随冒号,因此管道只是 .| grep -o "@.*" | sed 's/^.//'
3赞 psergiocf 11/12/2015 #7

您可以使用 npm view [module] version、npm info [module] version、npm show [module] version 或 npm v [module] version 来检查已安装的 npm 模块上的版本。

假设我的 Grunt 模块版本是 0.4.5:

npm view grunt version => 0.4.5
npm info grunt version => 0.4.5
npm show grunt version => 0.4.5
npm v grunt version    => 0.4.5

评论

24赞 sth 9/6/2016
所有这些都显示最新的可用版本,而不是当前安装的版本
80赞 chrissavage 1/27/2016 #8

我刚刚用过

npm list | grep <package name>

效果很好。

在 Windows 上,运行:

npm list | find <package name>

PowerShell 中运行:

npm list | sls <package name>

评论

4赞 fiat 6/23/2017
find版本对我不起作用 - 即使使用带引号的字符串,但 PowerShell 运行良好
6赞 robe007 3/9/2019
对于Windows用户: 注意双引号npm list -g --depth=0 |find "<package name>"
0赞 trusktr 11/2/2023
你如何只获得版本(没有其余的东西),不仅在 Bash 中,而且在 Windows PowerShell 中?你会认为他们很久以前就会想到这一点。
11赞 Eduardo Cuomo 5/13/2016 #9

尝试:

npm list --depth 1 --global packagename
15赞 KundraLaci 8/5/2016 #10

如果你足够勇敢(并且安装了 Node.js),你总是可以做这样的事情:

echo "console.log(require('./package.json').version);" | node

这将打印当前包的版本。 你也可以修改它,让它变得疯狂,就像这样:

echo "eval('var result='+require('child_process').execSync('npm version',{encoding:'utf8'})); console.log(result.WHATEVER_PACKAGE_NAME);" | node

这将打印 包的版本,即 。WHATEVER_PACKAGE_NAMEnpm version

评论

2赞 papiro 11/22/2019
node -e "console.log(require('./package.json').version);"
88赞 Fergie 9/30/2016 #11

从包的根目录执行以下操作:

node -p "require('./package.json').version"

(因此,如果您还没有进入模块的主目录,则需要进入该目录。如果您已使用 安装了该模块,则它将位于 下。cdnpm installnode_modules/<module_name>

评论

0赞 Venryx 5/9/2017
好!比其他答案所建议的运行“npm list”快得多(~1s 而不是 ~20s)——至少当你准备好这个代码片段时!(真的应该有一个 npm 插件来做到这一点......
2赞 Jeff Dickey 7/6/2017
node -p "require('./package.json').version"
7赞 geedew 3/23/2019
如果有像 ^ ~ 这样的范围分隔符,则不会安装实际版本
1赞 Michael K 3/9/2021
我想反对@geedew的评论。此答案建议在已安装模块的根文件夹中运行。在已安装模块的package.json中,您将找到实际安装的版本。
3赞 Aakash 11/17/2016 #12

访问 package.json 文件

您可以使用以下命令访问包的 package.jsonbower.json 文件:

Windows(已安装):notepad

notepad ./node_modules/vue-template-compiler/package.json`

这将在记事本中打开,其中包含命令中包含的 packageName 的版本号package.json

Mac/Linux系统:

cat node_modules/prettier/package.json | grep version

这将输出如下内容:

screenshot of command output

评论

9赞 Isochronous 6/14/2017
不仅有更简单的方法可以做到这一点,而且由于 semver 范围表示法,您在package.json中指定的版本实际上可能不是已安装的版本。也就是说,依赖项可以指定为版本 ^1.3.0,但这可能意味着从版本 1.3.0 到 1.99.99 的任何内容
0赞 Peter Mortensen 8/12/2022
大概仅在 Windows 上?这是在哪个版本/版本上尝试的?请通过编辑(更改)您的答案来回复,而不是在评论中(没有“编辑:”,“更新:”或类似内容 - 答案应该看起来像今天写的一样)。
0赞 Aakash 8/12/2022
嗨,@PeterMortensen,我已经更新了答案,提供了更多细节。希望这有帮助!!
13赞 Shekhar Tyagi 12/20/2016 #13

若要在本地或全局查看所有已安装的软件包,请使用以下命令:

  1. npm list用于本地包或全局安装的包。npm list -g
  2. npm list --depth=0
  3. npm list | sls <package name>
  4. node -v
7赞 JGFMK 6/4/2017 #14

我将其添加到我的 .bashrc 文件中:

function npmv {
    case $# in # Number of arguments passed
    0) v="$(npm -v)" ; # Store output from npm -v in variable
        echo "NPM version is: $v"; # Can't use single quotes
                                   # ${v} would also work
    ;;
    1) s="$(npm list --depth=0 $1 | grep $1 | cut -d @ -f 2)";
       echo "$s";
    ;;
    2) case "$2" in # Second argument
        g) #global| # Syntax to compare bash string to literal
             s="$(npm list --depth=0 -g $1 | grep $1 | cut -d @ -f 2)";
        echo "$s";
        ;;
        l) #Latest
             npm view $1 version; # 'npm info $1 version' does the same thing
       ;;
       *) echo 'Invalid arguments';
       ;;
       esac;
    ;;
    *) echo 'Invalid arguments';
    ;;
    esac;
}
export -f npmv

现在我所要做的就是输入:

  • npmv 表示 npm 的版本,例如,NPM version is: 4.2.0
  • npmv <package-name> 表示本地版本,例如,0.8.08
  • npmv <package-name> g 表示全局版本,例如,0.8.09
  • npmv <package-name> l 表示最新版本,例如,0.8.10

注意 cut 命令上的 -d 表示 delimited by,后跟 @,然后 f 表示字段。“2”表示第二个字段,因为 @ 符号的两侧各有一个。

3赞 Aliaksei Litsvin 11/4/2017 #15

您可以尝试以下操作: 显示最新的软件包版本。 如果您的软件包已过时,将显示它与版本信息。npm show {package} versionnpm outdated

评论

8赞 David Ferenczy Rogožan 4/13/2018
OP 询问的是当前安装的软件包的版本,而不是软件包注册表中可用的最新版本。
29赞 JoshuaDavid 12/13/2017 #16

结合上述一些答案,产生一个超级简单和超级快速的查找。

从项目根目录运行。无需进入任何文件夹,只需一行:cd

node -p "require('SOMEPACKAGE/package.json').version"

评论

0赞 Bbrk24 8/22/2023
这给了我错误“包子路径'./package.json'未由/path/to/SOMEPACKAGE/package.json中的”exports“定义”。这是否曾经有效,直到新的节点版本破坏了它,还是我做错了什么?
21赞 Sobin Sunny 12/16/2017 #17

您还可以使用以下命令检查版本:

npm info <package name> version

评论

45赞 David Ferenczy Rogožan 4/13/2018
同样,它显示软件包注册表中可用的最新版本,而不是当前安装的软件包的版本。
0赞 Nitin . 11/3/2018
@DawidFerenczy 同意其仅显示最新版本,例如 npm info httpaction
4赞 Nitin . 12/28/2017 #18

我们可以使用

npm info(模块名称)版本

评论

4赞 christianbundy 10/20/2018
这显示可用的最新版本,而不是本地目录中的版本。
0赞 Nitin . 11/3/2018
@christianbundy可以使用 npm list --depth=0 |grep uuid
0赞 christianbundy 11/6/2018
我不得不使用 ,但是是的,只要它是顶级依赖项,它就可以工作。不过,根据最初的问题,我认为情况并非总是如此。npm list --depth=0 | grep uuid | awk '{ print $2; }' | cut -d '@' -f 2
0赞 Peter Mortensen 8/12/2022
“承诺”后面不应该有空格吗?
33赞 Farhan Yaseen 3/9/2018 #19

对于本地软件包:

npm list --depth=0

对于全球包裹:

npm list -g --depth=0
12赞 Ran Yitzhaki 3/11/2018 #20

我构建了一个可以做到这一点的工具 - qnm

qnm - 用于查询目录的简单 CLI 实用程序。node_modules

使用以下方法安装它:

npm i --global qnm

然后运行:

qnm [module]

例如:

qnm lodash

输出:

lodash
├── 4.17.5
├─┬ cli-table2
│ └── 3.10.1
└─┬ karma
  └── 3.10.1

这意味着我们已经在 node_modules 文件夹文件夹的根目录中安装了另外两个副本,并在 和 的 node_modules文件夹中安装了另外两个副本。lodashcli-table2karma

它的速度非常快,并且具有一些不错的功能,例如 Tab 自动补全和匹配搜索。

7赞 zumafra 3/24/2019 #21

这是一个简单的问题,应该有一个比我在以前的答案中看到的更简单的答案。

要查看已安装的 npm 包及其版本,命令是 ,默认情况下,它显示本地安装的内容。若要查看全局安装的软件包,请添加参数:。npm ls --depth=0-globalnpm ls --depth=0 -global

--depth=0返回已安装的包列表,其中没有依赖项,这是您大多数时候想要执行的操作。

ls是命令的名称,并且是 的别名listls

13赞 Mahendra Pratap 6/11/2019 #22

npm list --depth 0是显示所有带有版本的库的命令,但您可以使用 .npm-check

npm-check 是一个很好的库,用于管理与版本系统事件相关的所有事情。它将显示库版本、新版本更新和未使用的版本等等。

要安装它,只需运行:

npm install -g npm-check

只需运行

npm-check

检查屏幕截图。它显示有关包版本、新版本更新和未使用版本的所有内容。

Enter image description here

它也适用于全球。试一试。

14赞 kavigun 7/10/2019 #23

若要列出具有版本号的本地包,请使用:

npm ls --depth=0

若要列出具有版本号的全局包,请使用:

npm ls -g --depth=0

11赞 Nandhiny Durai 3/5/2020 #24

npm list package-name 给出当前安装的版本

34赞 Daksh Patel 5/14/2020 #25

警告:此答案显示 npm 中模块的最新可用版本,而不是本地当前安装的版本。


这很简单。.只需输入以下行

npm view <package-name> version

npm view redux version

我有 Redux 的 7.2.0 版本。

评论

116赞 Felix Alcala 10/1/2020
注意:这不显示已安装的版本。它显示了 npm 上的最新可用版本。
18赞 Charles Owen 7/20/2020 #26

我看到了一些非常有创意的答案,但你可以这样做(对于全局包,添加 --global 开关):

npm ls package

例:

npm ls babel-cli

输出:

`-- [email protected]

npm 文档说 npm -ls

此命令将打印到 stdout 所有包的版本 以及它们的依赖项安装在树结构中。

NPM 文档

评论

0赞 Neeraj 10/2/2020
'..以及它们的依赖关系,在树状结构中' - 当心结构地狱 (:
6赞 Aymen Jarouih 8/12/2020 #27

如果要检查全局安装的特定模块,请在类 Unix 系统上使用:

npm list -g --depth=0 | grep <module_name>
-3赞 SuperHarmony910 2/4/2021 #28

您还可以在文本编辑器中手动查看package.json文件,以查看哪些包是依赖项。如果不能作为手动替代方法,请使用它。npm list

33赞 Snow 5/6/2021 #29

您可以查看文件package.json以查看已安装的软件包版本。

若要在命令行上获取列表,请执行以下操作:

npm ls

它将为您提供项目中所有已安装的软件包及其各自的版本。

对于特定的包版本,

npm ls <package-name>

例如

npm ls next

它将返回版本

-- [email protected]
-2赞 Raj Gohil 7/6/2021 #30

有一种简单的方法可以做到这一点。 首先,转到所需的位置(所在的位置)。 只需将文件作为文本编辑器打开即可。package.jsonpackage.json

通过这种方法,您可以在一个地方找到所有模块版本。

package.json看起来像这样

{
  "name": "raj",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "bcrypt": "^5.0.1",
    "connect-flash": "^0.1.1",
    "dotenv": "^10.0.0",
    "ejs": "^3.1.6",
    "express": "^4.17.1",
    "express-session": "^1.17.2",
    "mysql2": "^2.2.5",
    "passport": "^0.4.1",
    "passport-local": "^1.0.0",
    "sequelize": "^6.6.2",
    "socket.io": "^4.1.2"
  }
}

因此,您可以读取 PC 中每个已安装的依赖项(模块),即 ,因此版本。"socket.io": "^4.1.2"'socket.io'4.1.2

5赞 saltedlolly 11/13/2021 #31

若要获取已安装的版本号,请尝试:

npm list --depth=0 packagename | grep packagename | cut -d'@' -f2

例如,PM2 的安装版本号:

npm list --depth=0 pm2 | grep pm2 | cut -d'@' -f2

要列出全局安装的软件包,请在命令中添加标志,例如:-gnpm list

npm list -g --depth=0 packagename | grep packagename | cut -d'@' -f2

评论

0赞 coyotte508 12/7/2023
对我来说不是,但其他方面效果很好!-f3-f2
4赞 1nstinct 11/23/2021 #32

我正在使用

npm list --depth=0 | grep module_name@

它给我带来了这样的结果:

[email protected]
-7赞 yılmaz 1/26/2022 #33

只需检查您的 package.json 文件即可。

"dependencies": {
  "ajv": "^8.9.0",
  "ajv-keywords": "^5.1.0",
  "fastify": "^3.27.0"

评论

1赞 floodlitworld 4/7/2022
这仅显示版本要求,而不显示版本本身。例如,虽然版本要求是 “ajv-keywords”: “^5.1.0”,但实际安装的软件包版本可能是 v5.39.104。
0赞 yılmaz 4/9/2022
@floodlitworld,您可以检查 node-modules 目录中的该信息
0赞 Banushan Puviraj 5/3/2023 #34

npm 列表 npm list '包名称' npm show 'package name' 版本

0赞 pav 9/1/2023 #35

查找特定节点模块版本的另一种方法是在文件夹中找到它node_modules并找到“version”值。不是在整个应用程序中,而是在模块自己的应用程序中。
例如,需要知道安装的软件包的版本。然后应该在 中打开该文件夹。它将在文件夹内。然后应该在记事本中打开它。然后在其中找到价值。
package.jsonpackage.jsonpackage.jsonfoofoonode_modulespackage.jsonfoopackage.json"version"