有opal-irb
,但是opal-jquery
有vienna
没有办法通过 Opal 直接在浏览器中使用 gems?
问问题
1411 次
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
源代码以查看这些内容:
于 2014-07-05T15:35:57.593 回答
3
像往常一样,答案是肯定的,也不是,这取决于你的观点。Opal 会将您的 ruby(全部)转换为 JavaScript,并提供适当的运行时间。如果您需要 gem,则在编译过程中将需要它,并将包含在生成的 JavaScript 中。您可以在您的 ruby 代码中自由使用生成的 ruby 类(最终再次编译成 JavaScript)。
因此,您可以require gems,但请记住,它们的 requires 也将是必需的,因此如果您不小心,最终会遇到 JavaScript 文件的噩梦。从技术上讲,您仍然没有在浏览器中运行 ruby,为此必须将其全部编译为 JavaScript。但是,您可以运行从您的 ruby 和所需的 gem 生成的代码,尽管在此过程中它会变成 JavaScript(并且您将不得不对其进行调试)。虽然这种方法有一些限制,但您必须记住 JavaScriptNumber
和String
属性(也就是不可变String
的),但在这些限制内,您可以在服务器和客户端之间共享您的代码。
于 2014-07-04T12:51:11.313 回答