【问题标题】:How to add 'lib' to LOAD_PATH using Gemfile without gemspec?如何在没有 gemspec 的情况下使用 Gemfile 将“lib”添加到 LOAD_PATH?
【发布时间】:2021-01-16 16:08:12
【问题描述】:

我用bundle init 开始了一个小项目。实际上我构建的是一个应用程序,而不是一个 gem,所以我决定不使用 .gemspec 文件。 我遇到了无法使用require 来要求位于lib 中的文件的问题。例如,在bundle exec ruby bin/console 我得到:

无法加载此类文件 -- new/gem

使用 gemspec 文件可以正常工作,因为它默认具有 require_paths = ["lib"] 选项,在 require "bundler/setup" 之后,您可以使用 require 访问位于 lib 中的文件。

如果我不使用 gemspec 文件,我如何提示 Bundler 我希望有可能从 librequire

【问题讨论】:

    标签: ruby bundler require


    【解决方案1】:

    有几种方法:

    1. 使用require_relative "../lib/app"
    2. bin/console 中添加lib$LOAD_PATH$LOAD_PATH.unshift "./lib"
    3. 只需在命令行中内联添加:bundle exec ruby -Ilib bin/console

    请注意,如果您在您的应用程序中使用 require_relative(并且您应该使用),那么 lib 不需要$LOAD_PATH 中,您应该只是能够require "path/to/app"无论你想加载它。

    【讨论】:

    • 谢谢。第二个选项最适合。因为rubocop-packaging 说我不应该使用require_relative 并且手动指定-I 会太乏味。我只是认为会有一些我不知道的 Bundler 选项,但它实际上可以用普通的 Ruby 解决。
    • @Kirill 有趣。只需阅读该文档,它确实有意义,但要清楚,这是 test 代码:“我们要强调的是,在 lib/ 中使用 require_relative 没有任何问题,它只是从你的测试代码到 lib 目录可以防止“测试系统范围内安装的库”用例。”对于测试,在测试助手中添加 lib$LOAD_PATH 是很常见的。
    • 谢谢你,李。不知道此规则用于测试,因为在我的情况下,它会在根目录中的文件上触发。这对测试有意义,RSpec 默认将libspec 添加到$LOAD_PATH
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-13
    • 1970-01-01
    • 1970-01-01
    • 2020-01-10
    • 1970-01-01
    • 1970-01-01
    • 2020-06-24
    相关资源
    最近更新 更多