仅复制剩余文件

时间:2017-06-30 16:46:41

标签: gulp

我希望有一个繁琐的任务,只复制尚未处理的文件,而不必专门排除它们。例如:您可以在下面的gulpfile中看到我从复制任务中排除vue个文件,因为它们已经被vue任务处理过了。我想,不是指定要排除的glop,而是排除上一个任务用作src的所有文件。

const gulp = require('gulp')
const clean = require('gulp-clean')
const vueify = require('gulp-vueify')

gulp.task('vue', () =>
  gulp.src('src/**/*.vue')
    .pipe(vueify())
    .pipe(gulp.dest('./dist')))

gulp.task('copy', () =>
  gulp.src(['src/**/*', '!src/**/*.vue'])
    .pipe(gulp.dest('./dist')))

gulp.task('clean', () =>
  gulp.src('dist')
    .pipe(clean()))

gulp.task('default', [ 'vue', 'copy' ])

1 个答案:

答案 0 :(得分:0)

您可以定义一个配置变量,用于存储src任务的路径:

const conf = {
    'vue': ['src/**/*.vue'],
    'uglify': ['./src/file3.js', './src/file1.js', './src/file2.js']
}

然后,您将迭代所有数组值以构建copy任务数组参数,如:

const target = []
target.push('src/**/*')
for (i in conf) {
    for (var j in conf[i]) {
        target.push('!' + conf[i][j])
    }
}

这是一个完整的例子:

const gulp = require('gulp')
const clean = require('gulp-clean')
const vueify = require('gulp-vueify')
const concat = require('gulp-concat')
const uglify = require('gulp-uglify')

const conf = {
    'vue': ['src/**/*.vue'],
    'uglify': ['./src/file3.js', './src/file1.js', './src/file2.js']
}

gulp.task('uglify', function() {
    gulp.src(conf['uglify'])
        .pipe(concat('common.js'))
        .pipe(uglify())
        .pipe(gulp.dest('./dist/'))
});

gulp.task('vue', () =>
    gulp.src(conf['vue'])
    .pipe(vueify())
    .pipe(gulp.dest('./dist')))

gulp.task('copy', () => {
    const target = []
    target.push('src/**/*')
    for (i in conf) {
        for (var j in conf[i]) {
            target.push('!' + conf[i][j])
        }
    }
    gulp.src(target)
        .pipe(gulp.dest('./dist'))
})

gulp.task('clean', () =>
    gulp.src('dist')
    .pipe(clean()))

gulp.task('default', ['vue', 'uglify', 'copy'])