Gulp-sass компилирует sass файлы при помощи node-sass, у котрого есть объект с различными опциями.
sass( {
outputStyle: 'expanded', // стиль вывода
sourceComments: true, // добавляет комментарий перед селектором в выходном файле о строке где этот селектор в исходном файле.
indentType: 'tab', // тип оступа
indentWidth: 1, // величина отступа max-10
includePaths: ['dev/scss/base/', 'dev/scss/elements/'] // массив путей подключаемых файлов, вроде как должно решать проблему импортов...
})
так вот, есть там объект functions и в документации о нем написано совсем немного:
Это экспериментальная функция LibSass. Используйте с осторожностью.
функции является объект, который содержит набор пользовательских функций, которые могут быть вызваны с помощью Sass файлов составляются. Они могут принимать ноль или более входных параметров и должны возвращать значение либо синхронно
(return ...;)или асинхронно(done();). Эти параметры будут экземплярами одного из конструкторов, содержащихся вrequire('node-sass').typesхэшей. Возвращаемое значение должно быть одноним из этих типов. Смотрите список доступных типов ниже: ......
более подробной документации я не нашел, и не совсем понятно для каких целей это можно использовать.
Так же очень интересен аргумент опций importer, насколько я понял он используется для определения пользовательской функции импорта подключаемых файлов. Хочется подробностей.
Знающие люди поделитесь информацией, желательно с примерами :)
1 ответ 1
Вот Вам немного не-машинного перевода:
functions - это объект, который содержит набор пользовательских функций, которые могут быть вызваны во время компиляции. Они могут иметь произвольное количество входных параметров, и возвращать результат как синхронно (return), так и асинхронно (done). В качестве входных параметров вы получите инстансы типов (написано конструкторов, т.к. это js), содержащихся в хеше require('node-sass').types. Возвращаемое значение также должно быть инстансом одного из этих типов.
Далее в документе по вашей ссылке следует перечень типов, которые вы можете использовать в качестве входных параметров/возвращаемого значения таких функций, и далее - пример их использования, в котором Вы можете увидеть, как написать такую функцию, и как использовать ее внутри Sass:
sass.renderSync({
data: '#{headings(2,5)} { color: #08c; }',
functions: {
'headings($from: 0, $to: 6)': function(from, to) {
var i, f = from.getValue(), t = to.getValue(),
list = new sass.types.List(t - f + 1);
for (i = f; i <= t; i++) {
list.setValue(i - f, new sass.types.String('h' + i));
}
return list;
}
}
});
В этом примере используется javascript-функция headings, которая принимает два параметра типа sass.types.Number, и возвращает список (sass.types.List) строк (sass.types.String) - тегов hX, где X, в данном примере - число от 2 до 5.
Это нужно, чтобы вы могли написать свою функцию на js, и использовать ее из Sass. Удобно. Только лучше не забывать, что функциональность это экспериментальная.
UPD:
А импортер нужен для ручного разрешения импортов, это там тоже подробно описано. Эта функция (или несколько функций), которая принимает путь, который нужно разрезолвать, предыдущий разрезолваный путь и коллбэк, который нужно вызвать с Вашим результатом.
Результат - объект с полем "file", в котором лежит путь к нужному файлу, либо с полем "contents", в котором лежит уже содержимое файла, а не путь к нему.
Начните задавать вопросы и получать на них ответы
Найдите ответ на свой вопрос, задав его.
Задать вопрос