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

googya · 发布于 2017年3月18日 · 最后由 adamshen 回复于 2017年3月30日 · 711 次阅读
60

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 的源代码
共收到 8 条回复
4755

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

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

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

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

60

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

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

Eda824

我没有使用过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了,还算方便。

60a8f6

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

5楼 已删除
4755
60googya 回复

git 录屏是用的 LiceCap

De6df3
bundle open
bundle edit
1107

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

20859

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

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

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

bundle open ...

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