查找已安装的npm软件包的版本


2197

如何找到已安装的node.js / npm 软件包的版本?

这将打印npm本身的版本:

npm -v <package-name>

这将显示一个神秘的错误:

npm version <package-name>

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

npm view <package-name> version

如何获得安装的版本


5
在我的安装中,“ npm -v <软件包名称>”报告npm本身的版本。要在注册表中列出软件包的最新版本,我发现“ npm view <软件包名称>版本”可以完成工作。
戴维·格雷

15
npm show显示最新的npm,尚未安装
Tsagana Nokhaeva

Answers:


2574

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

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

projectName@projectVersion /path/to/project/folder
└── grunt@0.4.1

或者,您可以直接运行npm list而无需传递软件包名称作为参数来查看所有软件包的版本:

├─┬ cli-color@0.1.6 
 └── es5-ext@0.7.1 
├── coffee-script@1.3.3 
├── less@1.3.0 
├─┬ sentry@0.1.2 
 ├── file@0.2.1 
 └── underscore@1.3.3 
└── uglify-js@1.2.6 

您还可以添加--depth=0参数以列出已安装的软件包,而无需依赖它们。


126
在Mac和Linux上,最好添加“ | grep module_name”,以过滤所需的模块版本。特别是在使用-g全局运行时。例如:“ npm list -g | grep express”以获取已安装的Express版本。
Guya

103
如果需要特定的模块,可以像npm list less-middleware示例一样运行它。
juanpaco 2014年

13
按照@guya针对基于* nix的系统的提示,在Windows上,您可以使用PowerShell获得类似的结果:| select-string module_name过滤模块。或者,如果您使用的是Git Bash(或者仅使用Bash),则可以使用grep
Noel

15
如果您不记得了listnpm ls也可以。实际上,许多npm命令都具有别名,此外,如果您键入命令的子字符串,并且该子字符串是明确的,那么它也将起作用。例如npm lsnpm listnpm lis都是一样的。如果您想要更多详细的输出,请尝试npm ll(但可能要--depth=0添加到其中)。
jakub.g

4
输出不是解析脚本的最佳选择。真的没有一种方法可以获取仅是软件包版本的输出,而无需执行类似操作npm list -g | awk -F@ '/<package>/ { print $2}'
Thayne

867

找出本地安装了哪些软件包且没有相关性的另一种快速方法是使用:

npm list --depth=0

这给你像

├── bower@0.8.6
├── grunt@0.4.1
├── grunt-bower-requirejs@0.4.3
├── grunt-contrib-clean@0.4.1
├── grunt-contrib-coffee@0.7.0
├── grunt-contrib-copy@0.4.1
├── grunt-contrib-imagemin@0.1.4
├── grunt-contrib-jshint@0.1.1
├── grunt-contrib-livereload@0.1.2
├── grunt-contrib-requirejs@0.4.1
├── grunt-regarde@0.1.1
└── grunt-svgmin@0.1.0

显然,可以使用全局进行相同的操作npm list -g --depth=0

如果您已经安装了许多软件包,则此方法更加清晰。

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


14
它给我的感觉就像没有--depth
ygaradon 2014年

7
看来他们已经在npm 1.4.6中修复了它。见github.com/npm/npm/issues/4733
Howie

7
| grep <package_name>
Marco Prins

4
@ygaradon正确,但是--depth=0使速度更快,因为它不必递归加载依赖项
Marco Prins

npm list -g --depth=0用于全局安装的列表模块
EdgeDev '19

219

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

npm list --depth=0 -返回没有依赖性的所有已安装模块的版本。

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

最后获得节点版本: node -v


16
npm view <package>版本,转到npm远程注册表,而不是本地文件系统...
Alexander Mills

@AlexanderMills是的,但是在这里避免了其他搜索。顺便说一句,npm vnpm info并且npm show是所有别名npm view
CPHPython

85
npm info YOUR_PACKAGE version

例如

npm info grunt version
0.4.5

104
这不会显示已安装的软件包版本,而只会显示最新的可用版本。
Tanner Semerad 2015年

同意@ tanner-semerad。我检查了npm的文档以对其进行澄清。 npm infonpm的别名npm view,在npm的Docs中,您会发现该名称: 该命令显示有关软件包的数据,并将其打印到outfd配置引用的流中,该配置默认为stdout。[...] 如果未指定,默认版本为“最新”。 那就是我投反对票的方式。
dannydedog '18

显示可用的最新版本,而不是最新安装的版本。不赞成投票。
lofihelsinki

2
npm info YOUR_PACKAGE version唯一有效的方法:)
GOXR3PLUS,

同样,“ npm info YOU​​R_PACKAGE版本”唯一有效的版本
Jonas

63

我刚用过

npm list | grep <package name>

而且效果很好

在Windows上运行:

npm list | find <package name>

在PowerShell中运行:

npm list | sls <package name>

3
find版本对我不起作用-即使使用引号引起来的字符串,但powershell都可以正常工作
菲亚特

4
对于Windows用户: npm list -g --depth=0 |find "<package name>"请注意双引号
robe007 '19

56

从包的根开始:

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

编辑:(因此,cd如果您还不存在npm install,则需要进入该模块的主目录。如果您已使用来安装该模块,则它将位于node_modules/<module_name>

编辑2:根据@ jeff-dickey的答案进行更新


真好!其他答案表明,运行“ npm list”比运行“ npm list”要快得多(〜1s而不是〜20s)-至少在准备好此代码段的情况下!(确实应该有一个npm插件来执行此操作...)
Venryx

1
node -p "require('./package.json').version"
杰夫·迪基

2
如果存在像^〜这样的范围分隔符,则不会安装实际的版本
geedew


21

结合上面的一些答案,可以产生超级简单和快速的查找。
从项目根目录运行。无需cd进入任何文件夹,只需一行:

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


21

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

npm info <package name> version


29
同样,它显示软件包注册表中可用的最新版本,而不是当前安装的软件包的版本。
David FerenczyRogožan18年

@DawidFerenczy同意仅显示最新版本,例如npm info httpaction
Nitin。

16

如果您同意安装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

14

如果您足够勇敢(并已node安装),则可以始终执行以下操作:

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_NAME包的版本,如所示npm version


node -e "console.log(require('./package.json').version);"
papiro

12

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

  1. npm list用于本地软件包或npm list -g全局安装的软件包。
  2. npm list --depth=0
  3. npm list | sls <package name>
  4. node -v


10

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

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

使用以下方法安装:

npm i --global qnm

并运行:

qnm [module]

例如:

> qnm lodash

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

这意味着我们必须lodash安装的根node_modules,并在另外两个副本node_modulescli-table2karma

它确实非常快,并且具有一些不错的功能,例如制表符补全和匹配搜索。


9

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

npm ls --depth=0

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

npm ls -g --depth=0


8

您可以使用npm view [module]版本npm info [module]版本npm show [module]版本npm v [module]版本来检查已安装的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

15
所有这些都显示最新的可用版本,而不是当前安装的版本
sth

8

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

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

安装它就可以运行

npm install -g npm-check

并简单地运行

npm-check

查看屏幕快照,其中显示了有关软件包版本,新版本更新和未使用版本的所有信息。

在此处输入图片说明

它也在全球范围内运作。试试看。希望这对某人有帮助。


6

这是一个可移植的Unix(使用grepsed)单行代码,它返回全局安装的npm软件包的版本字符串(将gfrom 删除,-pg以查询本地软件包):

$ npm ll -pg --depth=0 grunt | grep -o "@.*:" | sed 's/.$//; s/^.//'
0.4.5
  • npm ll可解析的串格式如下输出:/usr/lib/node_modules/npm:npm@2.14.8: ;
  • grep命令提取介于@和之间的值:(含);
  • sed命令删除周围的字符。

6

我将此添加到我的.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 same thing
       ;;
       *) echo 'Invalid arguments';
       ;;
       esac;
    ;;
    *) echo 'Invalid arguments';
    ;;
    esac;
}
export -f npmv

现在,我要做的就是键入:

  • npmv用于npm的版本,例如:NPM version is: 4.2.0
  • npmv <软件包名称>用于本地版本,例如:0.8.08
  • npmv <package-name> g用于全局版本,例如:0.8.09
  • npmv <软件包名称> l以获取最新版本,例如:0.8.10

注意:cut命令上的-d表示定界,后跟@,然后f表示字段2表示第二个字段,因为@符号的任一侧。


5

您可以尝试以下方法: npm show {package} version显示最新的软件包版本。并且,如果您的软件包已过时,npm outdated则将显示其版本信息。


2
OP正在询问当前安装的软件包的版本,而不是软件包注册表中可用的最新版本。
David FerenczyRogožan18年

5

这是一个简单的问题,应该比我上面看到的答案更简单。

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

--depth=0 返回没有相关性的已安装软件包的列表,这是您大多数时候想要做的。

ls是命令的名称,并且list 是一个别名ls


3

访问 package.json

您可以通过以下方式访问包的package.jsonbower.json

notepad ./node_modules/:packageName/package.json

这将打开package.jsonnotepad其具有version number:packageName你所包含的command

例如 :

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

祝好运。


6
不仅有更简便的方法来执行此操作,而且由于semver范围符号,您在package.json中指定的版本实际上可能不是已安装的版本。也就是说,可以将一个依赖项指定为^ 1.3.0版本,但这可能意味着从1.3.0版到1.99.99版之间的所有内容
Isochronous

3

我们可以使用npm查看任何承诺(您的模块名称)-v


1
这将显示可用的最新版本,而不是本地目录中的版本。
christianbundy

@christianbundy您可以使用npm list --depth = 0 | grep uuid
尼丁。

我必须使用npm list --depth=0 | grep uuid | awk '{ print $2; }' | cut -d '@' -f 2,但是,是的,只要它是顶级依赖项,它就可以工作。基于原始问题,我认为情况并非总是如此。
christianbundy


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.