资产管道:忽略某些文件类型

时间:2014-07-23 04:45:33

标签: ruby-on-rails ruby typescript asset-pipeline source-maps

我有一个Rails 4项目,.js.map目录中有app/assets/sourcemaps个文件,.ts中有app/assets/typescripts directory.个文件但运行时{{}} 1}},Sprockets使用的预编译将崩溃,错误类似于:

rake assets:precompile

当然,失败是有道理的,因为.js.map文件不是javascript文件,但Sprockets仍试图用它做一些事情。

如何让Sprockets忽略这些文件?我试过用rake aborted! ExecJS::ProgramError: Unexpected token: punc (:) (line: 1, col: 10, pos: 10) Error ....... a backtrace ...... (in $APP_ROOT/app/assets/sourcemaps/index_uploads_controller.js.map) Tasks: TOP => assets:precompile 试图解决这个问题,但这似乎没有什么区别。还有一些关于SO的问题似乎有类似的问题,但解决方案不适用于Rails 4.

谢谢!

2 个答案:

答案 0 :(得分:1)

不幸的是,我没有简单的方法(我知道)从资产预编译中排除事物,直到它成为sprockets by default的一部分。你有几个选择。

  1. 编写一个忽略源图的新预编译包含语句:(例如,通过asset pipeline guide
  2. 配置/初始化/ assets.rb

    Rails.application.config.assets.precompile << Proc.new do |path|
      if path =~ /\.(css|js)\z/
        full_path = Rails.application.assets.resolve(path).to_path
        app_assets_path = Rails.root.join('app', 'assets').to_path
        if full_path.starts_with? app_assets_path
          puts "including asset: " + full_path
          true
        else
          puts "excluding asset: " + full_path
          false
        end
      else
        false
      end
    end
    
    1. 使用类似coffee-rails-source-maps之类的内容,可以帮助您为仅开发环境设置内容。

    2. 在其他地方手动将源图片移出app/assets目录,并在尝试映射所有内容时进入痛苦的世界,同时确保它们不会被提交到存储库或内置到存储库中资产pipiline。

答案 1 :(得分:0)

一种简单的方法是将所有css文件放在样式表的子目录中,例如assets / stylesheets / application和javascripts的子目录中的所有js文件,例如assets / javascripts / application

然后在你的js清单中//= require_tree .替换//= require_tree ./application并在你的css清单中用*= require_tree .替换*= require_tree ./application

这会使您的sourcemaps和typescripts目录不在编译范围内