Search code examples
crystal-lang

Crystal module path require issue


This is my first post so please excuse the brevity. I'm learning crystal and trying to include a file which has a shared name with another file in another path. According to the documentation I can use require "path/to/modules/" and include all files within, but when I do this I and then use the imported class, it tells me the class does not exist...

Nothing in the documentation seems to work. Is there some addon module I need to get the paths to work properly or am I misunderstanding something or do I have some syntax error?

This is my code (Using the example on the home page)

require "http/server"
require "modules/HttpRequest"

server = HTTP::Server.new do |context|
  context.response.print(request.result)
end

server.listen(80)

And the file HttpRequest.cr is in /modules/.

The error I get

Error in Server.cr:2: while requiring "modules/HttpRequest": can't find file 'modules/HttpRequest'

If you're trying to require a shard:
- Did you remember to run `shards install`?
- Did you make sure you're running the compiler in the same directory as your shard.yml?

require "modules/HttpRequest"
^

Solution

  • Using require "modules/HttpRequest" will look up modules/HttpRequest in CRYSTAL_PATH according to the require rules.

    To require a file relative to the current file you need to use require "./modules/HttpRequest".