ChatGPT解决这个技术问题 Extra ChatGPT

查找已安装 npm 包的版本

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

这将打印 npm 本身的版本:

npm -v <package-name>

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

npm version <package-name>

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

npm view <package-name> version

如何获取已安装的版本?

在我的安装中,“npm -v ”报告了 npm 本身的版本。要在注册表中列出软件包的最新版本,我发现“npm view version”可以完成工作。
npm show 显示 npm 中的最新版本,未安装
大多数时候 -v 应该可以工作。但是,这取决于包开发者是否在他们的包中添加了 cli 功能。

C
Cozy

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 参数以列出已安装的软件包而不列出其依赖项。


在 mac 和 linux 上,添加“|grep module_name”很好,以过滤所需的模块版本。尤其是在使用 -g 全局运行时。例如:“npm list -g | grep express”获取已安装的 express 版本。
如果你想要一个特定的模块,你可以像npm list less-middleware那样运行它作为例子。
根据 @guya 针对基于 *nix 的系统的提示,在 Windows 上,您可以使用 PowerShell 获得类似结果:| select-string module_name 过滤模块。或者,如果您使用的是 Git Bash(或者只是 Bash,就此而言),您可以使用 grep
如果您不记得 listnpm ls 也可以。事实上,许多 npm 命令都有别名,而且,如果你键入命令的子字符串,如果这个子字符串是明确的,它也可以工作;例如 npm lsnpm listnpm lis 都是一样的。如果您想要更详细的输出,请尝试 npm ll(但可能您希望将 --depth=0 添加到其中)。
输出不是使用脚本解析的最佳选择。是否真的没有办法获得只是包版本的输出而不必执行npm list -g | awk -F@ '/<package>/ { print $2}'之类的操作
Z
Zoe stands with Ukraine

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

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


它给我的和没有 --depth 一样
看来他们已经在 npm 1.4.6 中修复了它。请参阅github.com/npm/npm/issues/4733
| grep <package_name> 配合得很好
@ygaradon 正确,但 --depth=0 使它更快,因为它不必递归加载依赖项
npm list -g --depth=0 用于全局安装的列表模块
g
greuze

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

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

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

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


npm 查看 版本,转到 npm 远程注册表,而不是本地文件系统...
@AlexanderMills 是的,但是将它放在这里可以避免再次搜索。顺便说一句,npm vnpm infonpm show 都是 npm view 的别名。
同样,npm view <package> versions 将返回软件包的所有版本,而不仅仅是最新版本。
D
David Beckwith
npm info YOUR_PACKAGE version

例如

npm info grunt version
0.4.5

这不显示已安装的软件包版本,它只显示最新的可用版本。
同意@tanner-semerad。我检查了 Docs of npm 以清除它。 npm infonpm view 的别名,在 Docs of npm 中您会发现: 此命令显示有关包的数据并将其打印到 outfd 配置引用的流中,默认为 stdout。 [...] 如果未指定,默认版本为“最新”。这就是我投反对票的方式。
显示可用的最新版本,而不是最新安装的。否决。
npm info YOUR_PACKAGE version 唯一有效的 :)
不,如前所述,这将在注册表中显示最新版本。如果您的本地依赖项碰巧在最新版本上,则此“似乎”有效。但如果不是,您将看不到使用此命令实际安装的(旧)版本。
F
Fergie

从包的根目录执行:

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

编辑:(因此,如果您还没有进入模块的主目录,则需要 cd。如果您使用 npm install 安装了模块,那么它将在 node_modules/<module_name> 下)

编辑 2:根据@jeff-dickey 的回答更新


好的!正如其他答案所建议的那样(〜1s而不是〜20s)比运行“npm list”快得多 - 至少当你准备好这个代码片段时! (真的应该有一个 npm 插件来做到这一点......)
node -p "require('./package.json').version"
如果有 ^ ~ 之类的范围分隔符,则不会安装实际版本
我想反对@geedew 的评论。这个答案建议在已安装模块的根文件夹中运行。在已安装模块的 package.json 中,您将(!)找到实际安装的版本。
N
Nirav Vasoya

我刚用

npm list | grep <package name>

效果很好

在 Windows 上运行:

npm list | find <package name>

在 PowerShell 中运行:

npm list | sls <package name>

find 版本对我不起作用 - 即使使用带引号的字符串,但 powershell 运行良好
对于 Windows 用户: npm list -g --depth=0 |find "<package name>"注意 双引号
C
Cameron Tacklind

这很简单..只需在下面输入

npm view <package-name> version

例子

npm view redux version

我有版本 7.2.0 的 redux


它有效😍这应该是现在接受的答案。
打败我为什么“npm view < package-name > --version”不被接受!
注意:这不显示已安装的版本。它显示了 npm 上的最新可用版本。
正如@FelixAlcala 所说,这不显示已安装软件包的版本,仅显示最新可用的版本。
@KieranRyan,因为这是错误的。 (参见 Felix 和其他人的评论。)
F
Farhan Yaseen

对于本地包

npm list --depth=0

对于全球包裹

npm list  -g --depth=0

F
Farhan Yaseen

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

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


B
Benoit Blanchon

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

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

j
jaume

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

npm info <package name> version


同样,它显示包注册表中可用的最新版本,而不是当前安装的包的版本。
@DawidFerenczy 同意其仅显示最新版本,例如 npm info httpaction
K
KundraLaci

如果您足够勇敢(并且安装了 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

这将打印 npm version 看到的 WHATEVER_PACKAGE_NAME 包的版本。


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

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

npm ls package

例子:

npm ls babel-cli
`-- babel-cli@6.26.0

npm 文档说 npm -ls

此命令将以树形结构将已安装的所有软件包版本及其依赖项打印到标准输出。

NPM documentation


'..以及它们的依赖关系,在树形结构中' - 当心结构地狱(:
D
DivideByZero

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

npm list 用于本地包或 npm list -g 用于全局安装的包。 npm 列表 --depth=0 npm 列表 | sls <包名> node -v


L
Lahiru Mirihagoda

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

npm ls --depth=0

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

npm ls -g --depth=0


M
Mahendra Pratap

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

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

安装它只需运行

npm install -g npm-check

并简单地运行

npm-check

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

https://i.stack.imgur.com/2PQZW.png

它也适用于全球。试试看。希望这对某人有所帮助。


E
Eduardo Cuomo

尝试:

npm list --depth 1 --global packagename

R
Ran Yitzhaki

我已经构建了一个完全可以做到这一点的工具 - 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

这意味着我们在 node_modules 的根目录中安装了 lodash,在 cli-table2karmanode_modules 中安装了另外两个副本。

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


N
Nandhiny Durai

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


S
Snow

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

在命令行上获取列表

npm ls

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

对于特定的包版本

npm ls <package-name>

例如

npm ls next

它将返回版本

-- next@10.1.3

这才是真正的正确答案。
w
wjordan

这是一个可移植的 Unix(使用 grepsed)单行程序,它返回全局安装的 npm 包的版本字符串(从 -pg 中删除 g 以改为查询本地包):

$ 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 命令删除周围的字符。


z
zumafra

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

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

--depth=0 返回已安装软件包的列表,不包括它们的依赖项,这是您大多数时候想要做的。

ls 是命令的名称,list is an aliasls


p
psergiocf

您可以使用 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

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

我将此添加到我的 .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 版本是:4.2.0

npmv 用于本地版本,例如:0.8.08

npmv g 用于全球版本,例如:0.8.09

npmv l 用于最新版本,例如:0.8.10

注意 cut 命令上的 -d 表示分隔符,后跟 @,然后 f 表示字段,2 表示第二个字段,因为 @ 符号的任一侧都会有一个。


A
Aliaksei

您可以试试这个:npm show {package} version 显示最新的软件包版本。如果您的包已过时,npm outdated 将显示它的版本信息。


OP 询问当前安装的软件包的版本,而不是软件包注册表中可用的最新版本。
A
Aymen Jarouih

如果您想检查全局安装的特定模块,请在 *nix 系统上使用:

npm list -g --depth=0 | grep <module_name>

1
1nstinct

我在用

npm 列表 --depth=0 | grep 模块名称@

它给我带来了这样的结果

├── module_name@2.1033.0


A
Aakash

访问 package.json

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

notepad ./node_modules/:packageName/package.json

这将打开 notepad 中的 package.json,其中包含您在 command 中包含的 :packageNameversion number

例如 :

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

祝你好运。


不仅有更简单的方法可以做到这一点,而且由于 semver 范围符号,您在 package.json 中指定的版本实际上可能不是已安装的版本。也就是说,可以将依赖项指定为版本 ^1.3.0,但这可能意味着从版本 1.3.0 到 1.99.99 的任何内容
N
Nitin .

我们可以使用 npm view any-promise(your module name) -v


这显示了可用的最新版本,而不是本地目录中的版本。
@christianbundy 你可以使用 npm list --depth=0 | grep uuid
我必须使用 npm list --depth=0 | grep uuid | awk '{ print $2; }' | cut -d '@' -f 2,但是,只要它是顶级依赖项,它就可以工作。根据最初的问题,我认为情况并非总是如此。
s
saltedlolly

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

npm list -g --depth=0 包名 | grep 包名 |剪切 -d'@' -f2

例如安装的 PM2 版本号:

npm 列表 -g --depth=0 pm2 | grep pm2 |剪切 -d'@' -f2