我可以在蛋白石中使用Rubygem吗?
有opal-irb
和opal-jquery
和vienna
但有没有办法通过Opal直接在浏览器中使用gems?
您可以使用Opal.use_gem
将gem的lib
路径添加到Opal加载路径
常见的陷阱是:
- 使用String可变性
- 依赖于String和Symbol之间的区别
- 炮轰(
``
和%x{}
)
修复/解决其中一些问题的可用工具包括:
- 存根文件
Opal::Processor.stub_file('fileutils')
- 使用
RUBY_ENGINE
在编译时隐藏代码分支,例如:unless RUBY_ENGINE == 'opal' unparsable/breaking code here end
您可以查看opal-rspec
源代码以查看这些内容:
像往常一样,答案是肯定的,而不是在同一时间,这取决于你的观点。 Opal会将您的ruby( 全部 )转换为JavaScript并提供适当的运行时间。 如果您需要gem,则在编译过程中将需要它,并将包含在生成的JavaScript中。 您可以在ruby代码中自由使用生成的ruby类(它最终会被编译成JavaScript)。
所以你可以要求gem,但请记住,他们的要求也是必需的,所以如果你不小心,最终会得到一个JavaScript文件的噩梦 。 从技术上讲,你仍然没有在浏览器中运行ruby,为了这个目的,它们都必须编译为JavaScript。 但是,您可以运行从ruby生成的代码和所需的gem,尽管在此过程中它将成为JavaScript(您将不得不调试它)。 但是这种方法有一些限制,你必须记住JavaScript Number
和String
属性(也就是只有不可变的String
),但在这些限制内,你可以在服务器和客户端之间共享你的代码。