如何在 Rails 3.1 应用程序中完全禁用 CoffeeScript?

Posted

技术标签:

【中文标题】如何在 Rails 3.1 应用程序中完全禁用 CoffeeScript?【英文标题】:How can I completely disable CoffeeScript in a Rails 3.1 app? 【发布时间】:2012-02-02 01:53:22 【问题描述】:

当我生成一个新的控制器时,Rails 也会为控制器生成一个.js.coffee 文件。因为我不使用 CoffeeScript,所以我希望 Rails 为我生成 .js 文件。

注释掉 coffee-rails gem 是否足以在 Rails 3.1 应用程序中完全禁用 CofeeScript?

【问题讨论】:

您可以使用find . -iname '*.coffee'获取所有coffeescript文件的列表。 【参考方案1】:
    在您的 Gemfile 中注释掉 gem "coffee-script" 为您的 javascript 文件使用 .js 而不是 .js.coffee

【讨论】:

这是否记录在某处注释掉coffee-script gem 就足够了? 你为什么不试试看? 我的 Gemfile 中没有该行,但我仍然需要在生产中安装 JS 引擎来编译资产(使用带有 load 'deploy/assets' 行的 Capistrano)。有点烦人。 一般来说,从 Gemfile 中删除项目应该可以,但有一些警告。 coffee-script 可能是另一个 GEM 的依赖项。检查依赖关系的最佳位置是./Gemfile.lock。例如:coffee-railsturbolinks的依赖,coffee-scriptcoffee-rails的依赖。所以,如果你从 Gemfile 中删除 gem 'coffee-script',但如果你有 gem 'turbolinks'',CoffeeScript 仍然会被安装。 另外,如果你使用像 active_admin 这样的东西,coffescript 也作为依赖项包含在内,因此这不仅适用于标准 Rails gem。最安全使用config.generators do |g| g.javascript_engine :js 【参考方案2】:

不确定这是否适用于 Rails 3.1,但在 4 中,您还应该在 application.rb 中将 javascript_engine 设置为 :js,以指示生成器创建 .js 文件而不是 .js.coffee

config.generators do |g|
  # .. other configuration ..
  g.javascript_engine :js
end

【讨论】:

你也可以在一行中做到这一点:config.generators.javascript_engine :js 这在 Rails 4.1 中似乎不再需要。只需从 Gemfile 中删除“gem coffee-rails”就足够了。 即使在 Rails 4.1 中,如果你对诸如 activeadmin 这样的咖啡轨有传递依赖,它仍然是必要的 这在 Rails 4.2.4 中不再需要 这应该是最佳答案【参考方案3】:

Koen 和 Gaurav Gupta 有很好的答案!

如果您想为每个新的 Rails 项目自动进行这些更改,您可以使用模板文件。

~/rails-template.rb

# Don't install coffeescript
gsub_file 'Gemfile', /^gem \'coffee-rails\'/ do
  "\# gem 'coffee-rails'"
end

# Mess with generators to get the behavior we expect around new files
# For these injections, indentation matters!
inject_into_file 'config/application.rb', after: "class Application < Rails::Application\n" do
  <<-'RUBY'
    config.generators do |g|
      # Always use .js files, never .coffee
      g.javascript_engine :js
    end
  RUBY
end

然后在~/.railsrc

-m ~/.rails-template.rb

现在,每当您运行 rails new 时,coffeescript gem 将被注释掉,新控制器将使用 .js 而不是 .coffee

在 Rails 5.0.4 上测试,但我相信它也应该适用于早期版本。


顺便说一句,Rails templates 和 generators in general 非常强大。我是一名教师,我的学生通常会在整个课程中创​​建 15 到 20 个 Rails 项目,为他们提供一个包含调试 gem、规范样式测试等的良好模板文件可以节省大量时间。当然,在他们自己进行过一次更改之后。如果您有兴趣,我的个人.rails-template.rb 是on GitHub。

【讨论】:

【参考方案4】:

注意 Rails 4,或者如果您使用 'turbolinks'、'uglifier' 或任何其他需要服务器解释 javascript 的 gem,请将它们也注释掉。

【讨论】:

您可能仍然需要 turbolinks 或 uglifier,即使您还没有在自己的源代码中使用 CoffeeScript。【参考方案5】:

我遇到了这个问题,因为我正在使用 codekit 来编译我的咖啡脚本。

我通过将“assets/coffee”文件夹重命名为“assets/cafe”解决了这个问题,所以 rail 找不到它。

编辑:什么有效(唯一对我有效,上述答案无效)是添加一个单独的文件夹“App/Coffee”,并将其设置为编译到 assets/javascript 文件夹中。如果它在 assets 目录中,无论名称如何,rails 都会找到它。

【讨论】:

该死的,重新启动 Rails 后发现 assets/cafe 并试图再次编译它。

以上是关于如何在 Rails 3.1 应用程序中完全禁用 CoffeeScript?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 jquery 插件添加到 rails 3.1

随机生成的密码 Rails 3.1

c#如何完全禁用用户按钮

您如何在 Rails 3.1 中使用 Sprockets 编写干燥的模块化咖啡脚本?

Rails 3.1+ 为移动和桌面客户端提供服务的方式

Rails 4:如何在 Rails 中使用 JQuery 禁用基于复选框值的文本字段