查找已安装 npm 包的版本

Posted

技术标签:

【中文标题】查找已安装 npm 包的版本【英文标题】:Find the version of an installed npm package 【发布时间】:2012-06-13 21:21:45 【问题描述】:

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

这会打印 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 功能。 【参考方案1】:

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@ '/&lt;package&gt;/ print $2'【参考方案2】:

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

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 &lt;package_name&gt; 配合使用效果很好 @ygaradon 正确,但是--depth=0 使它更快,因为它不必递归加载依赖项 npm list -g --depth=0 列出全局安装的模块【参考方案3】:

npm view &lt;package&gt; version - 返回包中最新的可用版本。

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

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

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

【讨论】:

npm 查看 版本,转到 npm 远程注册表,而不是本地文件系统... @AlexanderMills 是的,但是将它放在这里可以避免再次搜索。顺便说一句,npm vnpm infonpm show 都是 npm view 的别名。 同理,npm view &lt;package&gt; versions 将返回软件包的所有版本,而不仅仅是最新版本。【参考方案4】:
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 唯一有效的 :) 不,如前所述,这将在注册表中显示最新版本。如果您的本地依赖项碰巧在最新版本上,则此“似乎”有效。但如果不是,您将看不到使用此命令实际安装的(旧)版本。【参考方案5】:

从包的根目录做:

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

编辑:(所以如果你还没有在模块的主目录中,你需要cd。如果你用npm install安装了模块,那么它将在@987654324下@)

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

【讨论】:

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

我刚用过

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 "&lt;package name&gt;" 注意双引号【参考方案7】:

对于本地包

npm list --depth=0

对于全球包

npm list  -g --depth=0

【讨论】:

【参考方案8】:

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

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

【讨论】:

【参考方案9】:

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

【讨论】:

【参考方案10】:

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

npm info &lt;package name&gt; version

【讨论】:

再次,它显示包注册表中可用的最新版本,而不是当前安装的包的版本。 @DawidFerenczy 同意其仅显示最新版本,例如 npm info httpaction【参考方案11】:

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

npm view <package-name> version

示例

npm view redux version

我有 7.2.0 版的 redux

【讨论】:

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

如果你足够勇敢(并且安装了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);"【参考方案13】:

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

    npm list 用于本地包或npm list -g 用于全局安装包。 npm list --depth=0 npm list | sls &lt;package name&gt; node -v

【讨论】:

【参考方案14】:

我已经构建了一个工具,可以做到这一点 - 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 的根目录中安装了lodash,在cli-table2karmanode_modules 中安装了另外两个副本。

它非常快,并且具有一些不错的功能,例如选项卡完成和匹配搜索。

【讨论】:

【参考方案15】:

尝试:

npm list --depth 1 --global packagename

【讨论】:

【参考方案16】:

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

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

安装它只需运行

npm install -g npm-check

然后简单地运行

npm-check

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

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

【讨论】:

【参考方案17】:

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

npm ls --depth=0

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

npm ls -g --depth=0

【讨论】:

【参考方案18】:

这是一个可移植的 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 命令删除周围的字符。

【讨论】:

【参考方案19】:

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

npm ls package

例子:

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

npm 文档说 npm -ls

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

NPM documentation

【讨论】:

'..以及它们的依赖关系,在树结构中' - 当心结构地狱(:【参考方案20】:

您可以使用 npm view [module] versionnpm info [module] versionnpm show [module] versionnpm 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

【讨论】:

所有这些都显示最新的可用版本,而不是当前安装的版本【参考方案21】:

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

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

--depth=0 返回已安装包的列表,没有依赖项,这是您大部分时间想要做的。

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

【讨论】:

【参考方案22】:

我将此添加到我的 .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 g 用于全球版本,例如:0.8.09 npmv l 最新版本,例如:0.8.10

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

【讨论】:

【参考方案23】:

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

【讨论】:

【参考方案24】:

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

【讨论】:

OP 询问的是当前安装的包的版本,而不是包注册表中可用的最新版本。【参考方案25】:

访问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【参考方案26】:

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

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

【讨论】:

【参考方案27】:

我们可以使用npm view any-promise(你的模块名称)-v

【讨论】:

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

你可以通过 package.json 查看已安装的包版本

通过命令行获取列表

npm ls

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

对于特定的包版本

npm ls <package-name>

例如

npm ls next

它会返回版本

-- next@10.1.3

【讨论】:

【参考方案29】:

有一种简单的方法可以做到这一点。 首先,转到所需的位置(package.json 所在的位置)。 并以文本编辑器的形式简单打开 package.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"
  

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

【讨论】:

【参考方案30】:

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

【讨论】:

以上是关于查找已安装 npm 包的版本的主要内容,如果未能解决你的问题,请参考以下文章

查找已安装 npm 包的版本

npm安装同一个包的2个版本

npm 如何查看一个包的版本信息?

查看包的所有版本 npm view xxx versions

npm用法

如何修改npm包源码后,重新npm包的时候能是修改后的版本