如何在 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-rails
是turbolinks
的依赖,coffee-script
是coffee-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?的主要内容,如果未能解决你的问题,请参考以下文章