Rails 3.1 - Coffescript 无法编译为 js

Posted

技术标签:

【中文标题】Rails 3.1 - Coffescript 无法编译为 js【英文标题】:Rails 3.1 - Coffescript doesn't compile to js 【发布时间】:2012-11-08 12:09:30 【问题描述】:

我正在将应用程序从 Rails 3.0 迁移到 Rails 3.1。我更改了所有 nessasary 配置文件并安装了 gem(在 Ryan's screencast 的帮助下)。我的布局很少,我想为它们加载不同的脚本。

我有意见:

layouts/console.html.erb

<html lang="ru">
  <head>
    ...
    <%= stylesheet_link_tag "console" %>
    <%= yield :stylesheets%>
    <%= javascript_include_tag 'console' %>
    ...
    <%= yield :javascripts%>
  </head>
</html>

在我的资产中,我创建了文件 console.js:

assets/javascripts/console.js

// WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
// GO AFTER THE REQUIRES BELOW.
//
//= require jquery
//= require jquery_ujs
//= require_self
//= require_tree ./console

我还创建了 console 文件夹,其中包含此文件夹中的文件:

assets/javascripts/console/users.js.coffee

jQuery ->
  alert "Test"

但是当我加载此类页面时,不会出现警报。

当我调试页面时,我看到 Rails 加载了这个

<script type="text/javascript" src="/assets/console.js?body=1"></script>

其中包含:

// WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
// GO AFTER THE REQUIRES BELOW.
//
; 

还有这个:

<script type="text/javascript" src="/assets/console/users.js.coffee ?body=1"></script>

其中包含:

jQuery ->
alert "Test"
; 

我的问题是什么?我该如何解决这个问题?

UPD:页面头部的链接:

<head>
   ...
   <meta charset="utf-8">
   <meta name="csrf-param" content="authenticity_token">
   <meta name="csrf-token" content="PAO2QZ6Z3ykmksXnY55dmCehq+i2COXmSlnZWjErFwA=">
   <link type="image/vnd.microsoft.icon" rel="shortcut icon" href="/favicon.ico">
   <link type="text/css" rel="stylesheet" media="screen" href="/assets/console.css?body=1">
   <link type="text/css" rel="stylesheet" media="screen" href="/assets/console/console.css?body=1">
   <link type="text/css" rel="stylesheet" media="screen" href="/assets/console/pagination.css?body=1">
   <link type="text/css" rel="stylesheet" media="screen" href="/assets/console/search-form.css?body=1">

   <script type="text/javascript" src="/assets/jquery.js?body=1"></script>
   <script type="text/javascript" src="/assets/jquery_ujs.js?body=1"></script>
   <script type="text/javascript" src="/assets/console.js?body=1"></script>
   <script type="text/javascript" src="/assets/console/users.js.coffee ?body=1"></script>  
</head>

【问题讨论】:

你的问题是你的语法全错了。 @WaleedKhan 你能提供正确的解决方案吗?我不能理解我的错误。 【参考方案1】:

更新答案:

一行中有一个空格

<script type="text/javascript" src="/assets/console/users.js.coffee ?body=1"></script>

那不应该在那里!

确保users.js.coffee 的文件名中没有任何尾随空格。

原答案:(不是解决方案)

coffeescript 似乎没有解释该行

jQuery ->

您是否正确加载了 jQuery?确保你有

gem 'jquery-rails'

在您的 Gemfile 中,您已运行 bundle install

也可能值得尝试$ -&gt; 的替代语法,尽管它不应该有所作为。

【讨论】:

是的,我有这颗宝石。我尝试再次运行 bundle install 并使用 $ -&gt; 并没有帮助。 如果我没记错的话,&lt;script type="text/javascript" src="/assets/console/users.js.coffee ?body=1"&gt;&lt;/script&gt;这行好像有个空格,文件名后面有空格吗? 你是绝对正确的!我刚刚注意到它(在更改文件名之后)。 您可以更新您的答案,如果您愿意,我会将其设置为正确的。 很高兴听到这个消息 - 我已经更新了答案。完全删除旧答案或将其留在那里是礼仪吗?【参考方案2】:

Rails 3.0 应用程序在 Rails 3.1 上运行时可能会丢失一些代码。

首先,检查您的 Gemfile 中是否有这些宝石:

group :assets do
  gem 'jquery-rails'
  gem 'jquery-ui-rails'
  gem 'sass-rails',   '~> 3.2.3'
  gem 'coffee-rails', '~> 3.2.1'

  # See https://github.com/sstephenson/execjs#readme for more supported runtimes
  # gem 'therubyracer', :platforms => :ruby

  gem 'uglifier', '>= 1.0.3'
end

其次,检查这些行是否在 config/application.rb 中:

module SAH2Client
 class Application < Rails::Application

    ......

    # Enable the asset pipeline
    config.assets.enabled = true

    # Version of your assets, change this if you want to expire all your assets
    config.assets.version = '1.0'
  end

end

【讨论】:

以上是关于Rails 3.1 - Coffescript 无法编译为 js的主要内容,如果未能解决你的问题,请参考以下文章

Coffescript / JS with Rails,camelCase vs下划线命名方式

Rails:视图(和相关)文件更改时自动刷新浏览器

为啥 coffescript 创建这个闭包 [重复]

heroku推送Rails 3.2应用时突然出现 "无法检测到RACK任务 "的情况(无其他错误)。

Rails API 应用程序中 ActionCable 的 Websocket 客户端

JavaScript 与 coffescript 语法 - if 条件:优化 if 语句结构