cssmin неправильно обрабатывает @import
Я использую cssmin для файлов, содержащих @imports. cssmin правильно рекурсивно импортирует локальные файлы, но для импорта, который указывает на URL, импорт остается встроенным. Это делает полученный минимизированный CSS недействительным, потому что @ rules должен находиться в начале файла. Кто-нибудь знает хорошее решение или решение этой проблемы?
6 ответов
У меня точно такая же проблема с cssmin и @import, и я нашел решение с помощью grunt concat:
- Создайте конкретную задачу, которая:
- Поместите URL-адрес @import в начало измененного css-файла и замените ссылки на URL-адрес @imports на "".
- Выполните задачу concat:cssImport после задачи cssmin.
Код задачи Grunt: выполнить (concat:cssImport)
grunt.initConfig({
concat: {
cssImport: {
options: {
process: function(src, filepath) {
return "@import url(http://fonts.googleapis.com/css?family=Roboto:400,300,900);"+src.replace('@import url(http://fonts.googleapis.com/css?family=Roboto:400,300,900);', '');
}
}
},
files: {
'your_location_file_origin/file.full.min.css': ['your_location_file_destination/file.full.min.css']
}
} )}
Мое вдохновение приходит от https://github.com/gruntjs/grunt-contrib-concat.
Я добавил processImport: false
вариант ворчать.
'cssmin': {
'options': {
'processImport': false
}
}
Используйте следующий процесс:
- устанавливать
node-less
- импортировать файлы путем компиляции с
less
первый - минимизировать с
cssmin
Рекомендации
Я знаю этот вопрос в течение очень долгого времени, но я публикую его для тех, кто ищет эту проблему при переполнении стека... просто поместите свой код в /!..../ вот так:
/*! * @import url('//fonts.googleapis.com/cssfamily=Roboto:300,400,400i,500,700,700i'); */
он будет включен в пункт назначения min css, но не забудьте использовать удаленный импорт в верхней части вашей страницы.
У меня было что-то вроде этого в styles.scss:
@import url(custom-fonts.css);
Моя проблема заключалась в том, что @import не смог найти файлы, потому что отсутствовал корневой путь. Вот что я сделал с конфигуратором yeoman angular generator Gruntfile.js:
cssmin: {
options: {
root: '<%= yeoman.dist %>/styles/'
}
},
Полезная ссылка grunt-contrib-cssmin проблема № 75
Размещение импорта в верхней части моего scss не работает для меня, в итоге я импортировал внешние таблицы стилей непосредственно из html:
<link href="https://fonts.googleapis.com/icon?family=Material+Icons"
rel="stylesheet">
<link href="http://fonts.googleapis.com/css?family=Roboto:400,300"
rel="stylesheet">
<!-- Place favicon.ico and apple-touch-icon.png in the root directory -->
<!-- build:css(.) styles/vendor.css -->
<!-- bower:css -->
......
<!-- endbower -->
<!-- endbuild -->
<!-- build:css(.tmp) styles/app.css -->
<link el="stylesheet" href="../bower_components/bootstrap/dist/css/bootstrap.css">
<link rel="stylesheet" href="styles/app.css">