如何找出与 Ruby 一起打包的库的版本,例如json?

Posted

技术标签:

【中文标题】如何找出与 Ruby 一起打包的库的版本,例如json?【英文标题】:How can I find out the version of a library that is packaged with Ruby, e.g. json? 【发布时间】:2021-09-03 12:02:40 【问题描述】:

与 Ruby 发行版一起打包的一些 Ruby 功能(不需要显式地作为 gem 安装或通过捆绑器安装)。 JSON 就是一个例子 (require 'json')。在 Ruby 代码中可能需要它,但不需要安装 gem。

然而,JSON 是 Github 上的一颗宝石,位于 https://github.com/flori/json。

那么当我在代码中需要 'json' 时,我如何知道我得到了哪个版本的 gem?

【问题讨论】:

【参考方案1】:

您可以找到 Ruby 主目录,并在其下方搜索适当名称的目录,然后检查其 version.rb 文件。例如,使用 rvm 管理的 rubies,我可以这样做(在 Linux 或 Mac OS 等 Posix 兼容系统上):

$ cd $(which ruby)/../..; pwd
/Users/keith.bennett/.rvm/rubies/ruby-3.0.1

$find . -type d -name '*json*'
./lib/ruby/3.0.0/psych/json
./lib/ruby/3.0.0/json
./lib/ruby/3.0.0/rdoc/generator/template/json_index
./lib/ruby/3.0.0/x86_64-darwin19/json
./lib/ruby/gems/3.0.0/gems/json-2.5.1
./lib/ruby/gems/3.0.0/gems/rbs-1.0.4/stdlib/json

我可以cat ./lib/ruby/3.0.0/json/version.rb | grep 'VERSION '(包括“VERSION”之后的空格),我得到:

  VERSION         = '2.5.1'

..这也是上面列表中 gems 目录中 gem 的版本。

所以我可以看到 2.5.1 是我的 JSON 版本。

【讨论】:

【参考方案2】:

另外,许多 ruby​​ gem 用常量指定它们的版本。

您可以利用它来确定您在代码或控制台中使用的版本,例如

require 'json'
JSON.constants.grep(/VERSION/)
#=>[:VERSION, :VERSION_ARRAY, :VERSION_MAJOR, :VERSION_MINOR, :VERSION_BUILD]
JSON::VERSION
#=> 2.5.1
require 'bundler'
Bundler.constants.grep(/VERSION/)
#=> [:VERSION]
Bundler::VERSION
#=> 2.2.3

【讨论】:

以上是关于如何找出与 Ruby 一起打包的库的版本,例如json?的主要内容,如果未能解决你的问题,请参考以下文章

webpack进阶篇(二十五):webpack打包组件和基础库

如何找出项目使用的 Ruby 版本 + Github

C++静态库与动态库详解

如何找出安装的 savon(Ruby 的 SOAP 客户端)的版本?

Linux篇第十篇——动静态库(动静态库的介绍+动静态库的打包与使用)

Linux篇第十篇——动静态库(动静态库的介绍+动静态库的打包与使用)