开发工具 推荐本地查看 gem 源代码的插件 gemsrc

googya · 2017年03月18日 · 最后由 adamshen 回复于 2017年03月30日 · 7419 次阅读

gemsrc 是个插件,作者对其描述为“Gem.post_install { git clone gem_source src } ”,顾名思义,当 install 了一个 gem 之后,会将其源代码 clone 到指定地方,方便以后查阅、研究。做如下配置即可:

git clone https://github.com/amatsuda/gem-src.git ~/.rbenv/plugins/gem-src
mkdir ~/src
echo "gemsrc_clone_root: ~/src" >> ~/.gemrc

该 gem 可以单独使用,作者推荐的做法是,它作为 rbenv 的一个 plugin 更好 (如果你用 rbenv 管理 ruby 版本的话)。

git clone https://github.com/amatsuda/gem-src.git ~/.rbenv/plugins/gem-src

以上只是使用 git clone 源代码,如果有名字相同的,就不会 clone 代码,所以作者又推荐与另外一个代码管理工具 ghq 配合使用:

  • GEMSRC_USE_GHQ environment variable
  • add gemsrc_use_ghq configuration in your .gemrc

ghq 在 OSX 上有两种安装方式:

  • brew install ghq
  • go get github.com/motemen/ghq

ghq,配合 (peco)[https://github.com/peco/peco] 效果又更好,能够互动搜索,我在 profile 文件中设置了

ghqlist='cd $(ghq list -p | peco)'

这么做了之后,能直接跳到代码库,很是方便。

用 gemsrc 对于 rubyist 来说,至少有两个好处:

  1. 能知道使用了那些 gem
  2. 方便查看 gem 的源代码

当 install 了一个 gem 之后,会将其源代码 clone 到指定地方,方便以后查阅、研究

感觉这个有点多此一举,本来已经下载一份源码了,还要另外 clone 一份到指定地方。 针对“方便以后查阅、研究”,我觉得这是个重复造轮子的事情了,事实上,bundler 本来就提供了 bundle open [gemname] 命令用于直接打开项目中 Gemfile.lock 文件指定的 gem 的源码。

如果你的当前目录并没有 Gemfile.lock 文件,但是想直接查看某个安装的 gem 的源码,也非常简单,安装一个 qwandry 就行了:

而以上不管哪种方式,只需要配置好一个 EDITOR 环境变量就好了

@martin91 嗯,你说得没错,特别是有时候想要在 gem 中打断点,bundle open 是不二之选。gemsrc 方式可以 pull 代码,查看有哪些变化,bundle 中的 gem,基本上是固定的某个版本,不太方便在对应的 gem 下 pull。当然了,如果根本不关心 gem 的现在的变化,也无 pull request 的需求,gemsrc 没什么用。

另外,评论中的 GIF 效果很差不错呢,是怎么做出来的?

我没有使用过 gemsrc,不过我愿意来说说我目前的工作流,首先如果只是看一眼源吗,bundler open wechat,如果还准备调试或者给 gem 加功能,肯定直接 clone 最新版,然后在 Gemfile 里面引用,并直接使用 clone 的版本:

# $ bundle config --local local.wechat /Users/guochunzhong/git/oss/wechat/
gem 'wechat', git: 'https://github.com/Eric-Guo/wechat.git', branch: :master

这样改完测完后就可以直接提 PR 了,还算方便。

对呀,本身不就已经下载了一份 gem 源码了么..?

5 楼 已删除
googya 回复

git 录屏是用的 LiceCap

bundle open
bundle edit

用 RubyMine 在 Project 导航里找 Libraries 就有了嘛。。。还能临时性的修改下源码

1 楼的办法比较好,如果用 RubyMine 的话,可以这样

EDITOR 环境变量可能其他的地方也会用到,不如设置 BUNDLER_EDITOR

export BUNDLER_EDITOR=/Applications/RubyMine.app/Contents/MacOS/rubymine

bundle open ...

需要 登录 后方可回复, 如果你还没有账号请 注册新账号