gulp-copy - 意外行为

时间:2015-03-11 19:48:16

标签: asynchronous gulp synchronous

有了gulp我想在处理之前将一些文件从一个地方复制到另一个地方。为了演示我的问题,我创建了以下gulpfile.js

var gulp = require('gulp');
var copy = require('gulp-copy');
var debug = require('gulp-debug');

gulp.task('default', function () {
    gulp.start('copy', 'list');
});

gulp.task('copy', function () {   // copy files
    gulp.src('source/*')
        .pipe(gulp.dest('target'));
});

gulp.task('list', function () {   // list all copies files
    gulp.src('target/*')
       .pipe(debug({title: 'file:'}));
});

现在,当我运行gulp时,我得到以下输出:

testing [master●●●] % gulp
[20:34:57] Using gulpfile ~/WebstormProjects/testing/gulpfile.js
[20:34:57] Starting 'default'...
[20:34:57] Starting 'copy'...
[20:34:57] Finished 'copy' after 4.92 ms
[20:34:57] Starting 'list'...
[20:34:57] Finished 'list' after 1.84 ms
[20:34:57] Finished 'default' after 7.77 ms
[20:34:57] file: 0 items

如您所见,列表任务未在target目录中看到任何文件。现在当我再次运行任务时,最后两行是:

[20:35:00] file: target/copyme
[20:35:00] file: 1 items

正如您在第一个日志中看到的那样,copy任务在list任务继续之前开始并结束。但是,因为列表任务没有看到target目录中的任何文件,所以我假设复制任务是异步的。有什么建议我可以在这里同步吗?

对于想要复制的人,这是我的package.json

{
    "dependencies": {
        "gulp": "^3.8.11",
        "gulp-copy": "0.0.2",
        "gulp-debug": "^2.0.1"
    }
} 

1 个答案:

答案 0 :(得分:2)

为什么不使用gulp的内置依赖管理?

var gulp = require('gulp');
var copy = require('gulp-copy');
var debug = require('gulp-debug');

gulp.task('default', ['list']);

gulp.task('copy', function () {   // copy files
    return gulp.src('source/*')
        .pipe(gulp.dest('target'));
});

gulp.task('list', ['copy'], function () {   // list all copies files
    return gulp.src('target/*')
       .pipe(debug({title: 'file:'}));
});