therubyracer或libv8在Rails应用程序中有什么作用?

16

我正在参与一个项目,经常遇到therubyracer和libv8的问题,所以决定将它们删除。似乎唯一使用它们作为依赖项的是我想要删除的less-rails。

我的主要问题是它们是用来做什么的?在普通应用程序中是否需要它们?如果需要,为什么?


2
它们通常用于在默认情况下未安装JavaScript运行时的平台上的资产管道。因此,如果您不在目标系统上编译资产或系统在路径中具有JavaScript运行时,则不需要它们。 - Doon
一个没有连接到互联网的CentOS服务器会有这个吗? - Weston Ganger
如果服务器已经安装了 JavaScript 运行时,例如 node.js,则不需要安装它。我不知道 CentOS 是否自带 JavaScript 运行时,如果您没有在该框上编译资源,则不需要安装。Less.rb 依赖于 commonjs,该库似乎只使用 therubyracer 或 therubyrhino。有关更多信息,请查看此处的答案。https://dev59.com/gWMl5IYBdhLWcg3wHTug - Doon
2个回答

14

一个Rails应用程序可能需要使用JavaScript Runtime的几个方面:

1)Rails Asset Pipeline 需要JavaScript Runtime来执行JavaScript压缩。

2)某些Rails ActionView Helpers ,例如 javascript_include_tag,需要JavaScript Runtime才能执行JavaScript函数。

并非每个Rails应用程序都使用这些功能,因此therubyracer gem最初在Gemfile中被注释掉;此外请注意,您也可以选择使用NodeJS作为JavaScript Runtime。

详情请参见:

http://guides.rubyonrails.org/asset_pipeline.html#javascript-compression

http://www.rubydoc.info/docs/rails/ActionView/Helpers/JavaScriptHelper

http://www.rubydoc.info/docs/rails/ActionView%2FHelpers%2FAssetTagHelper%3Ajavascript_include_tag

Proper "Rails" way to perform javascript on specific pages


4
rubyracer提供以下功能:
 1. We can write your ruby codes inside js codes. 
 2. We can invoke the js functions from ruby codes.  
 3. Manipulation of javscript objects & the passing them to javascript functions.

这里是使用rubyracer gem的一些基本好处。请在这里阅读完整详情。

第一项,这与js.erb文件有关吗? - Weston Ganger
当您通过ajax访问Rails控制器并希望进行一些交互时,您需要在app/views/action_name.js.erb文件中编写代码。 该文件将保存您的js代码+嵌入式ruby代码。 :) 请查看:http://richonrails.com/articles/basic-ajax-in-ruby-on-rails - Ajay
在提供的链接中搜索app/views/products/_save.js.erb: 那将解决你的疑惑 :) - Ajay
2
听起来很糟糕,为什么我们要从JS调用Ruby代码或反之亦然? - Nishant
1
糟糕!我收回我的话...我不得不在Java中运行JS(为了将模板系统移植到Java https://github.com/nishants/jeyson,https://github.com/nishants/wirestub)...如果我需要Sinatra/Rails端口,将不得不尝试rubyracer......太糟糕了,没有像Nashorn一样的纯Ruby替代品适用于Java。 - Nishant

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接