gulp-clean css无法为字体和图像等资产的url()设置正确的相对路径



我使用NPM和Gulp作为包管理器和构建系统。我安装了"gulp-sass"来支持sass,并安装了"kulp-clean-css",这样我就可以内联导入css文件。我在"_frontend/SCSS/**/*"中捕获我的SCSS文件,并将其编译为"assets/frontend/css/styles.css"的单个文件。在输出位置,我有其他重要的资源文件夹,它们是"css"的兄弟文件夹:"font"、"img"one_answers"js"。

我的问题是,当我导入一个"*.css"文件时,我无法正确地获得url()到目标的相对路径。不过,当我导入".scs"文件时,这是可以的。

这是我的代码(我拿出了源地图、错误日志等来简化问题):

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/font真棒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.4

使用relativeToroottarget,如果不想重新设置基准,可以使用rebase: false配置选项。

对于>=2.4版本

gulp-clean-css已经升级为使用clean-css 4.x,所以上面的选项都不起作用,它们只提供rebaseTo选项,该选项将重新设置所有路径的基础。

我使用relativeTo使其工作。

医生说:(https://www.npmjs.com/package/clean-css)

relativeTo-解析relative@import规则和URL 的路径

这意味着relativeTo+目标路径必须从gullfile.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");

相关内容

  • 没有找到相关文章

最新更新