查看Gem的源代码

时间:2012-05-04 17:10:55

标签: ruby rubygems

Ruby dabbler / newbie在这里对生态系统不熟悉,如果这是其中一个超级问题,那么道歉。

有没有办法查看所有由gem安装的文件和/或源代码?也就是说,我刚跑了

$ gem install sass

sass gem现在是我本地系统的一部分

$ gem list --local
...
sass (3.1.16, 3.1.2)
...

我想知道gem install命令放在我的系统上的内容。我可以运行一个命令来查看gem所安装的所有文件吗?

经过一些谷歌搜索man gemgem help commands后,我发现了contents命令。

$ gem contents sass

然而,当我使用前面提到的sass gem运行此命令时,我得到以下结果

.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/engine_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/functions_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/extend_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/logger_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/css2sass_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/conversion_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/script_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/util/subset_map_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/util/multibyte_string_scanner_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/callbacks_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/importer_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/scss/css_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/scss/scss_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/scss/rx_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/util_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/script_conversion_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/less_conversion_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/cache_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/plugin_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/bin/sass
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/bin/sass-convert
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/bin/scss

但是,这个列表似乎不完整,因为我知道

中有文件
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.2/lib/

为什么contents不会显示lib中的文件?

gem安装程序是否可以在gems文件夹之外安装文件?

是否有可以显示gem安装所有内容的命令?

6 个答案:

答案 0 :(得分:52)

gem有一个解包命令:http://guides.rubygems.org/command-reference/#gem-unpack

gem unpack rake
ls rake-0.4.3/

答案 1 :(得分:36)

有两种非常好的方法可以做到这一点。还有另一个宝石可以让你打开宝石并进行编辑。这个宝石叫gem-open

gem install gem-open 

然后

gem open sass

另一种方法是生成自己的rdocs。

gem rdoc sass

然后你可以通过

查看你的rdocs
gem server

此外,如果您使用的是rvm,则可以输入rvm info,它会显示GEM_HOME位置。 这将是您所有宝石源代码的所在。

cd $GEM_HOME
cd gems/sass-3.1.2/

更新

这是我在使用bundler时主要执行此操作的方式。

cd $(bundle show sass) 

这将是Gemfile中sass的版本。

答案 2 :(得分:12)

我通常通过从控​​制台运行此命令来打开一个gem

EDITOR=<your editor> bundle open <name of gem>

答案 3 :(得分:7)

您提到的lib /目录是针对gem的3.1.2版本;没有gem contents的{​​{1}}只会列出一个版本(它似乎会选择最新版本,但我无法验证这是否为真)。您为--version获得了什么输出?

答案 4 :(得分:2)

您也可以使用.gem文件重命名为.tar并解压缩为posix存档。源代码位于lib文件夹中。有关详细信息,请参阅https://blog.srcclr.com/extracting-ruby-source-code-from-gem-packages/

答案 5 :(得分:2)

除了gem contents之外,您可能会发现另一个有用的命令是gem environment。如果您的宝石安装有多个路径,它们将全部列在&#34; GEM PATHS&#34;标签