运行bundle install
命令后,将在工作目录中创建'Gemfile.lock‘。该文件中的指令是什么意思?
例如,让我们以下面的文件为例:
PATH
remote: .
specs:
gem_one (0.0.1)
GEM
remote: http://example.org/
specs:
gem_two (0.0.2)
gem_three (0.0.3)
gem_four (0.0.4)
PLATFORMS
platform
DEPENDENCIES
gem_two
gem_one!
“路径”、“GEM”、“平台”和“依赖关系”描述了什么?所有这些都是必需的吗?
什么应该包含'remote‘和'specs’子指令?
在‘依赖’组中gem名称后面的感叹号是什么意思?
发布于 2012-02-15 09:11:55
至于感叹号,我刚刚发现它在通过:git
获取的宝石上,例如
gem "foo", :git => "git@github.com:company/foo.git"
发布于 2012-09-21 12:00:42
在我看来,PATH直接列出了gemspec中的第一代依赖项,而GEM则列出了第二代依赖项(即您的依赖项所依赖的内容)和Gemfile中的依赖项。remote是.
,因为它依赖于当前目录中的本地gemspec来查找属于PATH::spec中的内容,而GEM::remote是rubygems.org
,因为要查找属于GEM::spec中的内容就必须转到GEM::spec中。
在Rails插件中,您将看到路径部分,但在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
由rails plugin new my_plugin
生成的Gemfile表示类似的内容:
# 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)在开发环境中,(1)将只在Gemfile.lock (因此也包括在应用程序中)中包含“七月”。因此,当您运行bundle install
时,您不仅会在PATH下看到“七月”,还会在依赖项下看到“7月”,而且只在开发中。在生产中,它根本不会在那里。然而,当你使用(2)时,你只会在路径中看到“七月”,而不会在依赖中看到,但是当你从一个生产环境(也就是在其他一些包含你的依赖的gem中) bundle install
时,它会显示出来,而不仅仅是在开发中。
这些只是我的观察,我不能完全解释为什么它是这样的,但我欢迎进一步的评论。
发布于 2016-09-09 09:35:12
似乎没有关于Gemfile.lock
格式的明确文档。也许是因为Gemfile.lock
只是由捆绑包在内部使用。
但是,由于Gemfile.lock
是Gemfile
的快照,这意味着它的所有信息都应该来自Gemfile
(如果没有在Gemfile
中指定,则来自默认值)。
对于GEM
,它列出了您在Gemfile
中直接或间接引入的所有依赖项。GEM
下的remote
告诉从哪里获取get,这是由source在Gemfile
中指定的。
如果没有从remote
中获取宝石,PATH
会告诉该位置如何找到它。当你声明一个依赖项时,PATH
的信息来自Gemfile
中的path。
而PLATFORM
来自here。
对于DEPENDENCIES
,它是包解析的依赖项的快照。
https://stackoverflow.com/questions/7517524
复制相似问题