В приложении, в котором я работаю, мне приходится динамически компилировать SASS перед рендерингом на клиенте (система кэширования идет, не волнуйтесь). В настоящее время я использую node-sass, и все работает отлично.
Вот что я сейчас работаю. Для краткости был удален другой код для проекта:
var sass = require('node-sass'),
autoprefixer = require('autoprefixer-core'),
vars = require('postcss-simple-vars'),
postcss = require('postcss'),
function compileCSS() {
var result = sass.renderSync({
file: 'path/to/style.scss'
});
return postcss([autoprefixer]).process(result.css.toString()).css;
}
Морщина заключается в том, что теперь мне нужно передать динамические данные из Node и скомпилировать их как обычную переменную SASS. Первоначально я пытался использовать PostCSS, потому что заметил, что переменная-инъекция что-то может сделать. К сожалению, это не сработало. PostCSS запускается после фазы компиляции, которая с этой точки зрения терпит неудачу.
Затем я попытался использовать underscore шаблоны, чтобы попробовать и перезаписать с помощью node -sass 'importer()
:
var result = sass.renderSync({
file: 'path/to/style.scss',
importer: function(url, prev, done) {
var content = fs.readFileSync(partial_path),
partial = _.template(content.toString());
return {
contents: partial({ test: 'test' })
};
}
});
Это привело к следующей ошибке:
Error: error reading values after :
Очевидно, что SASS не понравился синтаксис переменной подчеркивания..
TL; DR
Как передать динамические переменные в SASS из моего приложения Node?
Дополнительная информация
- Моя команда и я не совсем противно переходить на нечто вроде Stylus; однако до сих пор мы достигли значительного прогресса, и было бы больно.