Единовременный импорт в Сассе

К сожалению, в Сассе нет ничего похожего на require_once, однако, подобный функционал поставляется с Компассом. Если кратко, то можно весь Компасс не тянуть:

$ gem install compass-import-once

И затем запускать с ключом:

$ sass -r 'compass/import-once/activate' ...

Теперь импорт работает только единовременно. Если всё же нужно подключить несмотря ни на что, то добавляем «!»:

@import "something";
@import "something!";

Подробнее в доках.

Обновление от 10.05.2015:

Всё бы ничего, но при операции конкатенации строк (а может и не только) Сасс может отваливаться по непонятным причинам, примерно с такими логами:

Change block raise an execption: undefined method `to_tree' for nil:NilClass

Решений несколько:

  1. Не использовать конкатенацию строк (если это всё же её вина).
  2. Подтянуть полный гем Компасса, после чего запускать уже его. А в config.rb проекта в таком случае добавить:
require 'compass/import-once/importer'
module Compass::ImportOnce::Importer
	def find(uri, options, *args)
		uri, force_import = handle_force_import(uri.gsub(/^\(NOT IMPORTED\) /, ''))
		maybe_replace_with_dummy_engine(super(uri, options, *args), options, force_import)
	end
end

В теории, последнее решение можно было бы осуществить и без Компаса. Достаточно просто вынести этот код (и предыдущий для подключения compass-import-once) в отдельный файл и подключить его через ключ -r у Сасса. Должно заработать.

2015
Популярное