首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >了解Gemfile.lock文件

了解Gemfile.lock文件
EN

Stack Overflow用户
提问于 2011-09-22 23:40:37
回答 3查看 115.1K关注 0票数 196

运行bundle install命令后,将在工作目录中创建'Gemfile.lock‘。该文件中的指令是什么意思?

例如,让我们以下面的文件为例:

代码语言:javascript
复制
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名称后面的感叹号是什么意思?

EN

回答 3

Stack Overflow用户

发布于 2012-02-15 09:11:55

至于感叹号,我刚刚发现它在通过:git获取的宝石上,例如

代码语言:javascript
复制
gem "foo", :git => "git@github.com:company/foo.git"
票数 40
EN

Stack Overflow用户

发布于 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声明:

代码语言:javascript
复制
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表示类似的内容:

代码语言:javascript
复制
# Bundler will treat runtime dependencies like base dependencies, and
# development dependencies will be added by default to the :development group.

这意味着两者之间的差异

代码语言:javascript
复制
s.add_development_dependency "july" # (1)

代码语言:javascript
复制
s.add_dependency "july" # (2)

(1)在开发环境中,(1)将只在Gemfile.lock (因此也包括在应用程序中)中包含“七月”。因此,当您运行bundle install时,您不仅会在PATH下看到“七月”,还会在依赖项下看到“7月”,而且只在开发中。在生产中,它根本不会在那里。然而,当你使用(2)时,你只会在路径中看到“七月”,而不会在依赖中看到,但是当你从一个生产环境(也就是在其他一些包含你的依赖的gem中) bundle install时,它会显示出来,而不仅仅是在开发中。

这些只是我的观察,我不能完全解释为什么它是这样的,但我欢迎进一步的评论。

票数 8
EN

Stack Overflow用户

发布于 2016-09-09 09:35:12

似乎没有关于Gemfile.lock格式的明确文档。也许是因为Gemfile.lock只是由捆绑包在内部使用。

但是,由于Gemfile.lockGemfile的快照,这意味着它的所有信息都应该来自Gemfile (如果没有在Gemfile中指定,则来自默认值)。

对于GEM,它列出了您在Gemfile中直接或间接引入的所有依赖项。GEM下的remote告诉从哪里获取get,这是由sourceGemfile中指定的。

如果没有从remote中获取宝石,PATH会告诉该位置如何找到它。当你声明一个依赖项时,PATH的信息来自Gemfile中的path

PLATFORM来自here

对于DEPENDENCIES,它是包解析的依赖项的快照。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7517524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档