在我看来,PATH 直接从您的 gemspec 中列出了第一代依赖项,而 GEM 列出了第二代依赖项(即您的依赖项所依赖的内容)和 Gemfile 中的那些。PATH::remote 是.
因为它依靠当前目录中的本地 gemspec 来找出 PATH::spec 中的内容,而 GEM::remote 是rubygems.org
,因为它必须去那里找出 GEM:: 中的内容规格。
在 Rails 插件中,您会看到 PATH 部分,但在 Rails 应用程序中看不到。由于该应用程序没有 gemspec 文件,因此不会在 PATH 中放置任何内容。
至于 DEPENDENCIES,gembundler.com指出:
Runtime dependencies in your gemspec are treated like base dependencies,
and development dependencies are added by default to the group, :development
生成的 Gemfilerails 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 中)时,它会显示出来,而不是只有发展。
这些只是我的观察,我无法完全解释为什么会这样,但我欢迎进一步的评论。