gulp-clean-css не может установить правильный относительный путь для url() для ресурсов, таких как шрифты и изображения

Я использую NPM и Gulp для моего менеджера пакетов и системы сборки. Я установил "gulp-sass" для поддержки sass и "gulp-clean-css", чтобы я мог встроить @import css файлы. Я записываю свои файлы SCSS в "_frontend/scss/**/*" и собираю их в один файл как "assets / frontend / css / styles.css". В выходной папке у меня есть другие важные папки ресурсов, которые являются родственными элементами "css": "шрифты", "img" и "js".

Моя проблема в том, что я не могу получить относительные пути url() для правильной цели при импорте файла "*.css". Тем не менее, это нормально, когда я импортирую ".scss" файлы.

Вот мой код (для упрощения вопроса я взял исходные карты, журнал ошибок и т. Д.):

GULPFILE.JS

gulp.task('styles', function() {
    gulp.src(styles.src)
        .pipe(sassGlob())                                   // Support for bundle requires for Sass
        .pipe(cleanCSS({
            // relativeTo: './node_modules',    <-- I tried with different variations here, no luck
            // root: './node_modules',          <-- I tried with different variations here, no luck
            processImport: true
        }))
        .pipe(rename('styles.css'))                      // Name output CSS file
        .pipe(gulp.dest('../assets/frontend/css/'));
});

MAIN.SCSS

Следующее в порядке

@import "font-awesome/scss/font-awesome.scss";

Вывод, кажется, с правильными относительными путями Пример вывода: url(../fonts/FontAwesome/fontawesome-webfont.eot? V =4.6.1)

Следующее НЕ

@import '../node_modules/jquery-ui/themes/base/jquery-ui.css';

Пример вывода: url(../node_modules/jquery-ui/themes/base/images/animated-overlay.gif) ^^ Вышеприведенное как-то добавляет "../node_modules".Я хочу, чтобы это как-то было установлено на "../img/vendor/jquery-ui/what/ever/i/like/here"

Вот моя структура каталогов.

_frontend    
 ├─fonts
 │  ├─Beamstyle-Icons
 │  └─Gotham-Light-Regular
 ├─node_modules
 │  ├─jquery-ui
 │  │  ├─scripts
 │  │  └─themes
 │  │      ├─base
 │  │         ├─images
 │  │         └─minified
 │  │             └─images
 │  └─ (other stuff...)
 │
 ├─scripts
 │  ├─app
 │  └─vendor
 └─scss
     ├─config
     ├─helpers
     │  ├─classes
     │  ├─functions
     │  ├─mixins
     │  └─placeholders
     └─src
         ├─blocks
         └─components
assets
 └─frontend
    ├─css
    ├─fonts
    ├─img
    │  ├─Beamstyle-Icons
    │  ├─FontAwesome
    │  └─Gotham-Light-Regular
    └─js

Было бы здорово, если кто-нибудь может помочь в этом.

2 ответа

Для версии < 2.4

использование relativeTo, root а также target и если вы не хотите перебазировать, вы можете использовать rebase: false Варианты конфигурации.

Для версии> = 2.4

gulp-clean-css был обновлён для использования clean-css 4.x, поэтому ни один из приведенных выше вариантов не работает, и они только предоставляют rebaseTo вариант, который будет перебазировать все ваши пути.

Я заставил это работать, используя относительный.

Док говорит: ( https://www.npmjs.com/package/clean-css)

lativeTo - путь для разрешения относительных правил @import и URL-адресов.

Это означает, что относительный путь назначения + должен вести от gulpfile.js к относительному каталогу, указанному css-ресурсами (шрифтами, изображениями).

Пример:

\---project
    +---assets
    |   \---stylesheets
    |       |   style.css
    |       |   
    |       \---dist
    |               style.min.css
    | 
    |   \---fonts   
    |               my-font.ttf           
    \---gulp
            gulpfile.js

Целевой путь установлен (из gulpfile) в '../assets/stylesheets/dist'

Моя задача:

// Create minified css
gulp.task('minifycss', function() {
    return gulp
        .src('../assets/stylesheets/*.css')
        .pipe(cleancss({relativeTo: '../assets/', compatibility: 'ie8'}))
        .pipe(rename({
            suffix: ".min"                              // add *.min suffix
        }))
        .pipe(gulp.dest('../assets/stylesheets/dist'))
});

выход:

// style.css :
     src: url("../fonts/my-font.ttf");

// dist/style.min.css :
     src: url("../../fonts/my-font.ttf");
Другие вопросы по тегам