在我看来,PATH可以直接从gemspec列出第一代依赖关系,而GEM可以列出第二代依赖关系(即依赖关系所依赖的东西)以及Gemfile中的依赖关系。PATH :: remote是.
因为它依靠当前目录中的本地gemspec来查找PATH :: spec中的内容,而GEM :: remote是rubygems.org
,因为这是它必须去找出GEM ::中的内容的地方。规格
在Rails插件中,您会看到PATH部分,但在Rails应用程序中却没有。由于该应用程序没有gemspec文件,因此无需在PATH中放置任何内容。
至于依赖,gembundler.com指出:
Runtime dependencies in your gemspec are treated like base dependencies,
and development dependencies are added by default to the group, :development
生成的Gemfile rails plugin new my_plugin
表示类似的内容:
# Bundler will treat runtime dependencies like base dependencies, and
# development dependencies will be added by default to the :development group.
这意味着
s.add_development_dependency "july" # (1)
和
s.add_dependency "july" # (2)
是(1)在开发环境中的Gemfile.lock(以及应用程序中)仅包含“ july”。因此,当您运行时bundle install
,您不仅会在PATH下而且在DEPENDENCIES下看到“ july”,而且只会在开发中看到。在生产中,它根本不会存在。但是,当您使用(2)时,您只会在PATH中看到“ july”,而在DEPENDENCIES中则看不到,但是当您使用bundle install
在生产环境中(即在包含您的依赖项的其他gem中只有发展。
这些只是我的观察,我无法完全解释为什么其中的任何一种都是这种方式,但是我欢迎进一步评论。