0

我有一个 gulp 任务,它缩小 CSS 文件并将它们连接到一个文件:

gulp.task('minify-css', function() {
'use strict';
var pathsToMinifyAndConcat = [
    'css/index.css'
];

var pathsToConcatOnly = [
    'lib/css/font-awesome-4.3.0/font-awesome.min.css'
];

var minifyFiles = require('gulp-cssnano');
var concatAllFilesToOneFile = require('gulp-concat');
return gulp.src(
        []
            .concat(pathsToMinifyAndConcat)
            .concat(pathsToConcatOnly)
    )
    .pipe(minifyFiles())
    .pipe(concatAllFilesToOneFile('application.min.css'))
    .pipe(gulp.dest('dist'));
});

但是,如果某些文件已经被缩小(font-awesome.min.css例如),则不应再次缩小它 - 它应该只连接,并且应该从缩小过程中省略。有没有办法在保留文件顺序的情况下不使用hacky解决方案(我不想使用我无法完全理解的解决方案 - 而且我对gulp很陌生)?我找到了一个插件,可以在管道中的任何位置添加 src 文件:gulp-add-src,但它似乎有一段时间不活动。

4

2 回答 2

11

有不止一种方法可以做你想做的事。我给你举两个例子。

第一的:

var gulp = require('gulp');
var minify = require('gulp-cssnano');
var concat = require('gulp-concat');
var merge = require('merge-stream');

gulp.task('minify-css', function() {

  var pathsToMinify = [
    'css/style1.css'
  ];

  var pathsToConcat = [
    'css/style2.css'
  ];

  var minStream = gulp.src(pathsToMinify)
    .pipe(minify());

  var concatStream = gulp.src(pathsToConcat)

  return merge(minStream, concatStream)
    .pipe(concat('all.css'))
    .pipe(gulp.dest('dist'));

});

在此示例中,它创建了两个不同的流。一个是缩小的,另一个不是。最后将这两个流合并、连接,然后将文件写入磁盘。

第二:

var gulp = require('gulp');
var minify = require('gulp-cssnano');
var concat = require('gulp-concat');
var gulpFilter = require('gulp-filter');

gulp.task('minify-css', function() {

  var paths = [
    'css/style1.css',
    'css/style2.css'
  ];

  // Files to minify.
  var filter = gulpFilter([
    'style1.css'
  ],
  {
    restore: true
  });

  return gulp.src(paths)
    .pipe(filter)
    .pipe(minify())
    .pipe(filter.restore)
    .pipe(concat('all.css'))
    .pipe(gulp.dest('dist'));

});

在此示例中,仅创建了一个流,但乙烯基文件对象由 gulp-filter 过滤,并且仅对过滤后的对象进行了最小化。然后,原来在管道中的所有文件都使用 filter.restore 恢复并连接起来。

还有其他可能性,例如创建两个不同的任务,其中一个只是缩小,另一个连接,但是使用这种方法,您需要将缩小的文件临时写入磁盘。

于 2015-12-30T21:50:14.437 回答
4

像往常一样迟到,但另一种选择是有条件地使用gulp-if. 像这样的东西应该工作:

const gulp = require('gulp'),
  gulpif = require('gulp-if'),
  concat = require('gulp-concat'),
  minifyCss = require('gulp-cssnano');

gulp.task('css', function () {
  gulp.src([
    'css/index.css',
    'lib/css/font-awesome-4.3.0/font-awesome.min.css'
  ])
    .pipe(gulpif(file => !(file.path.includes('.min.css')), minifyCss()))
    .pipe(concat('app.min.css'))
    .pipe(gulp.dest('dist'));
});

希望这可以帮助!

于 2017-10-13T18:14:29.380 回答