gem 中的可执行文件如何引用更大的 gem?

How does an executable within a gem reference the greater gem?

说我的gem是VideoPlayer。文件夹结构为:

VideoPlayer/
    /bin
        vidplay.rb
    /lib
        VideoPlayer.rb
        Subtitler.rb
        Screenshotter.rb

我希望人们从命令行调用 vidplay,并让 vidplay 引用 VideoPlayerSubtitlerScreenshotter 文件中的代码.

如果我只是写,在vidplay.rbrequire '../lib/VideoPlayer.rb'之内,它会抛出一个错误,说它不能要求这样的文件。我以为 "Maybe it automatically requires everything in lib/",但显然不是;如果我不需要 任何东西,它会说 VideoPlayer 是一个未初始化的常量。

那么这是如何工作的?

我通常将 lib 目录添加到库加载路径 ($:)。您可以将其添加到 bin 文件的顶部。

lib = File.expand_path('../../lib', __FILE__)
$:.unshift(lib) unless $:.include?(lib)

然后你可以做一个正常的要求:

require 'videoplayer'

希望对您有所帮助。