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

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

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

【问题讨论】:

  • 您可以使用find . -iname '*.coffee'获取所有coffeescript文件的列表。

标签: ruby-on-rails-3.1 coffeescript


【解决方案1】:
  1. 在您的 Gemfile 中注释掉 gem "coffee-script"
  2. 为您的 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 templatesgenerators in general 非常强大。我是一名教师,我的学生通常会在整个课程中创​​建 15 到 20 个 Rails 项目,为他们提供一个包含调试 gem、规范样式测试等的良好模板文件可以节省大量时间。当然,在他们自己进行过一次更改之后。如果您有兴趣,我的个人.rails-template.rbon 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 并试图再次编译它。
    猜你喜欢
    • 1970-01-01
    • 2011-12-30
    • 2011-08-31
    • 2019-03-25
    • 2011-11-12
    • 2011-11-11
    • 2011-09-01
    • 1970-01-01
    相关资源
    最近更新 更多