1

我用 Gulp 创建了一个任务,它应该:

  1. 加入多个 CSS 文件;
  2. 缩小+删除不必要的CSS;
  3. 修复url()指令和其他的路径;
  4. 生成源图;

我目前的代码是:

var gulp = require("gulp"),
    concat      = require("gulp-concat"),
    cleanCSS    = require("gulp-clean-css"),
    sourcemaps  = require("gulp-sourcemaps");

var styleList = [
    "Resources/Include/ionicons/css/ionicons.css",
    "Resources/base.css",
    "Resources/extra.css",
];

gulp.task("deploy-css", function() {
    gulp.src(styleList)
    .pipe(sourcemaps.init())
    .pipe(concat("style.min.css"))
    .pipe(cleanCSS({
            debug: true, 
            compatibility: "ie8", 
            keepSpecialComments : 0,
            target: "Resources/",
            relativeTo: "Resources/"
        })
    )
    .pipe(sourcemaps.write())
    .pipe(gulp.dest("Resources/"))
});

url()路径示例,取自文件Resources/Include/ionicons/css/ionicons.css

@font-face { font-family: "Ionicons"; src: url("../fonts/ionicons.eot?v=2.0.0");

这是我当前的文件结构

./Resources/style.min.css // -> Final processed file
./Resources/base.css
./Resources/extras.css
./Resources/Include/ // -> Original CSS files with URL (installed via Bower)

测试文件夹https ://dl.dropboxusercontent.com/u/2333896/gulp-path-test.zip (安装然后运行gulp deploy-css)。

几乎一切都按预期工作,除非 CSS 文件包含使用该url()选项对图像或字体的引用。运行任务(并style.min.css创建)后,这些引用被破坏 - 原始 CSS 文件上的路径没有更改。

cleanCSS应该检查引用文件的位置并自动修复路径吗?选项不是用来控制的吗targetrelativeTo

我怎样才能解决这个问题?谢谢你。

4

1 回答 1

1

我设法解决了这个问题,我的主要问题是一个错误的concat操作破坏了gulp-clean-cssrebase 功能和错误targetrelativeTo选项。显然我对之前的工作流程并没有多想。

var gulp = require("gulp"),
    concat      = require("gulp-concat"),
    cleanCSS    = require("gulp-clean-css"),
    sourcemaps  = require("gulp-sourcemaps");

var styleList = [
    "Resources/Include/ionicons/css/ionicons.css",
    "Resources/base.css",
    "Resources/extra.css",
    "Resources/Include/teste/base.css"
];

gulp.task("deploy-css", function() {
    gulp.src(styleList)
    .pipe(sourcemaps.init())
    .pipe(cleanCSS({
            compatibility: "ie8", 
            keepSpecialComments : 0,
            target: "Resources",
            relativeTo: ""
        })
    )
    .pipe(concat("style.min.css", {newLine: ""}))
    .pipe(sourcemaps.write())
    .pipe(gulp.dest("Resources"))
});

这个新的工作流程如下:

  1. 优化所有单独的 CSS 文件 - 包括重新定位 url;
  2. 将单个优化文件联系到最终文件中-(注意newLine: ""避免文件中的换行符);
  3. 写文件。
于 2016-09-25T15:16:36.463 回答