我有一个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.
谢谢!
答案 0 :(得分:1)
不幸的是,我没有简单的方法(我知道)从资产预编译中排除事物,直到它成为sprockets by default的一部分。你有几个选择。
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
使用类似coffee-rails-source-maps之类的内容,可以帮助您为仅开发环境设置内容。
在其他地方手动将源图片移出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目录不在编译范围内