Грунт cssmin перебазирует относительный URI?

В настоящее время я настраиваю grunt-usemin для нашего проекта, но у меня небольшая проблема с cssmin задача.

Наш проект зависит от нескольких внешних библиотек, некоторые из которых приносят много дополнительных ресурсов (таких как изображения или шрифты). Проблема в том, что эти библиотеки не имеют одинаковую структуру папок.

Это пример различных структур папок

lib
|--lib1
|   |--style1.css
|   +--image1.png
+--lib2
   |--styles
   |   +--style2.css
   +--images
       +--image2.png

В index.html на все таблицы стилей ссылаются и помещают в блок сборки. Таким образом, при выполнении задачи usemin таблицы стилей библиотек объединяются в один минимизированный файл и помещаются в выходную папку. Соответствующие активы (изображения) также копируются в эту выходную папку и помещаются в img папка. Структура выходной папки выглядит следующим образом

out
|--allstyles.min.css
|--image1.png
+--image2.png

Как вы можете догадаться, объединенные таблицы стилей имеют (в этом примере) два разных относительных URI:

  • image1.png
  • ..\images\image2.png

Это вызывает проблему, когда некоторые изображения не могут быть найдены. Мне нужно решение для перебазирования всех относительных URI в папку out. Я пытался использовать target а также root варианты cssmin Задача, но безрезультатно. Может ли кто-нибудь указать мне правильную конфигурацию этой задачи или другую задачу Grunt, которая может достичь того, что я ищу?

Заранее спасибо!

2 ответа

Посмотрите в документации / опциях cssmin:

  • rebase: установите в false, чтобы пропустить перебазирование URL

Это решает проблему.

У меня есть ворчливый файл в C:\web\project и CSS файлы в C:\web\project\www\css, Следующий фрагмент взят из моего файла grunt, и он корректно перебазирует URL-адреса для меня.

var cssFiles = [
      'www/css/layout/Header.css',
      'www/css/layout/Footer.css',
      'www/css/vendor/chosen/chosen.css'
      // ...
];

cssmin: {
        concat: {
                options: {
                        keepBreaks: true, //  whether to keep line breaks (default is false)
                        debug: true, // set to true to get minification statistics under 'stats' property (see test/custom-test.js for examples)
                        noAdvanced: true, // set to true to disable advanced optimizations - selector & property merging, reduction, etc.
                        //relativeTo: 'http://online-domain-tools.com/'
                        noRebase: false, // whether to skip URLs rebasing
                        root: 'www'
                },
                nonull: true,
                src: cssFiles,
                dest: 'www/temp/application.css'
        },
        minify: {
                options: {},
                nonull: true,
                src: ['www/temp/application.css'],
                dest: 'www/temp/application.min.css'
        }
},

// ...

grunt.registerTask('default', ['cssmin:concat', 'cssmin:minify']);

Можете ли вы опубликовать свой grunt file, чтобы сравнить его?

Связанное чтение: /questions/21806901/usemin-i-perezapis-url-izobrazhenij-v-fajlah-css-postavschika-s-pomoschyu-grunt/21806908#21806908

Другие вопросы по тегам