7

opal-irb,但是opal-jqueryvienna没有办法通过 Opal 直接在浏览器中使用 gems?

4

2 回答 2

7

您可以通过使用将 gem 的lib路径添加到 Opal 加载路径Opal.use_gem

常见的陷阱有:

  • 使用字符串可变性
  • 依赖String和Symbol的区别
  • 炮击 (``%x{})

修复/解决其中一些问题的可用工具是:

  • 存根文件Opal::Processor.stub_file('fileutils')
  • 在编译时使用隐藏代码分支RUBY_ENGINE,例如: unless RUBY_ENGINE == 'opal' unparsable/breaking code here end

您可以查看opal-rspec源代码以查看这些内容:

https://github.com/opal/opal-rspec

于 2014-07-05T15:35:57.593 回答
3

像往常一样,答案是肯定的,也不是,这取决于你的观点。Opal 会将您的 ruby​​(全部)转换为 JavaScript,并提供适当的运行时间。如果您需要 gem,则在编译过程中将需要它,并将包含在生成的 JavaScript 中。您可以在您的 ruby​​ 代码中自由使用生成的 ruby​​ 类(最终再次编译成 JavaScript)。

因此,您可以require gems,但请记住,它们的 requires 也将是必需的,因此如果您不小心,最终会遇到 JavaScript 文件的噩梦。从技术上讲,您仍然没有在浏览器中运行 ruby​​,为此必须将其全部编译为 JavaScript。但是,您可以运行从您的 ruby​​ 和所需的 gem 生成的代码,尽管在此过程中它会变成 JavaScript(并且您将不得不对其进行调试)。虽然这种方法有一些限制,但您必须记住 JavaScriptNumberString属性(也就是不可变String的),但在这些限制内,您可以在服务器和客户端之间共享您的代码。

于 2014-07-04T12:51:11.313 回答