在使用Opal进行编译并随后在Node中运行时,如何使用require_relative?

时间:2018-02-19 22:17:30

标签: opalrb

我对Opal完全不熟悉。我只是通过在本地文件中编写简单的Ruby代码,使用opal -c test.rb > test.js编译它,然后使用node test.js执行生成的js文件来测试如何使用它。当我想要的所有代码都在test.rb中时,这工作正常。但是,如果test.rb对于第一行有require_relative 'other_file'和other_file.rb与test.rb存在于同一目录中,则在使用node执行时会失败。我收到一条错误消息,开头是这样的:

/Users/huliax/projects/scratch/opaltest/test.js:5022
  throw exception;
  ^
LoadError: can't find file: "other_file" in:
- /Users/huliax/.rvm/gems/ruby-2.5.0@car/gems/opal-0.11.0/opal
- /Users/huliax/.rvm/gems/ruby-2.5.0@car/gems/opal-0.11.0/stdlib
- /Users/huliax/.rvm/gems/ruby-2.5.0@car/gems/opal-0.11.0/lib
- /Users/huliax/.rvm/gems/ruby-2.5.0@car/gems/ast-2.3.0/lib
- /Users/huliax/.rvm/gems/ruby-2.5.0@car/gems/ast-2.3.0/lib
- /Users/huliax/.rvm/gems/ruby-2.5.0@car/gems/parser-2.3.3.1/lib

This向我建议我对require_relative没有任何问题。我没有得到任何编译时错误。我也尝试过独立地将other_file.rb编译为js,但这没有帮助。我只能假设我误解了一些事情。我需要做些什么才能让它发挥作用?

最终,我的目标是尝试使用Opal将整个ruby库/ gem(包含相当多的文件)编译为JavaScript。

1 个答案:

答案 0 :(得分:0)

请使用具有require relative的相对路径并包含扩展名,例如:

require_relative "./other_file.rb"

然后在编译时确保在包含路径中的两个文件之间包含当前目录或公共父目录,例如:

opal -I. test.rb -c > test.js

(在蛋白石v0.11.0上测试)