Skip to content

Instantly share code, notes, and snippets.

@cu39
Created July 4, 2013 16:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cu39/5928816 to your computer and use it in GitHub Desktop.
Save cu39/5928816 to your computer and use it in GitHub Desktop.
Sass::Engine#render_with_sourcemap
# coding: utf-8
require 'sass' # 3.3.0.alpha136
abs_dir = File.expand_path '..', __FILE__
sass_path_rel = 'views/application.sass'
sass_path_abs = File.join abs_dir, sass_path_rel
css_path_rel = 'css/application.css'
css_path_abs = File.join abs_dir, css_path_rel
css_uri_rel = css_path_rel
css_uri_abs = '/' + css_path_rel
sourcemap_uri_rel = 'css/application.css.map'
sourcemap_uri_abs = '/' + sourcemap_uri_rel
# 以下コメントは sass 3.3.0.alpha.136 の挙動にもとづく
sass_opts = {
# Sass::Engine コンストラクタに渡して *.sass 実ファイルの位置を教えてる
filename: sass_path_abs,
}
e = Sass::Engine.new File.read(sass_path_rel), sass_opts
# css ファイル内には sourcemap のパスが書かれる
# この引数で指定した値は *.css の sourceMappingURL に指定される
css, map = e.render_with_sourcemap sourcemap_uri_abs
puts '---- CSS -----------'
puts css
puts '---- Source Map ----'
# ソースマップ JSON 内には sass へのパスと css へのパスが書かれる
json_opts = {
# この値として与えられたファイル位置から sass_opts[:opts] までの相対パスが
# ソースマップ JSON の "sources" キーに対応する値に設定される
# メソッドの引数で与えてるのに再度指定しないといけない?
sourcemap_path: sourcemap_uri_abs,
# この値は render_with_sourcemap の引数(=ソースマップの位置)からの
# 相対パスに変換された上で
# ソースマップ JSON の "file" キーに対応する値となる
css_path: css_uri_abs,
}
puts map.to_json json_opts
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment