2016-06-08 92 views
1

考虑下面的目录结构:gulp.dest()不会导致文件更新

<project> 
|- src 
|- gen 
|- target 

我们已经制定了咕嘟咕嘟构建链执行整个前端构建我们。中间结果放在根目录目录中,最终结果存放在目标目录目录中。

在开发过程中,我们希望监视目标目录,并将更改同步到包含基于Grails的应用程序的单独目录。我们用下面的代码片段此:

'use strict'; 

var debug   = require('gulp-debug'); 
var config  = require('../config'); 
var gulp   = require('gulp'); 
var watch   = require('gulp-watch'); 

module.exports = { 
    //command: 'prod', 
    //desc: 'Builds "production" version', 
    run: function(){ 
    gulp.task('watch', ['server'], function() { 

     // Copy files from the 'target' directory to the framework directory while developing 
     var source = config.dist.root, 
      destination = config.fw.root; 

     gulp.src(source + '/**/*', {base: source}) 
      .pipe(debug({title: 'unicorn:'})) 
      .pipe(watch(source + '/**/*', {base: source})) 
      .pipe(debug({title: 'minotaur:'})) 
      .pipe(gulp.dest(destination)) 
      .pipe(debug({title: 'centaur:'})); 

    }); 
    } 
}; 

当我更新的源文件,构建链火灾,并把更新的结果在目标目录。但更新不会同步到单独的Grails目录。当我检查记录,我看到:

[14:29:42] Rebundle... 
[14:29:42] minotaur: target\web-app\portal\js\appLoader.js 
[14:29:43] minotaur: target\web-app\portal\js\appLoader.js 

看来这个文件是在目标目录再生和再生是通过吞气手表包装回升。但该文件不是由gulp.dest()函数写的?!

这里可能会发生什么?

回答

0

经过一些试验和错误,似乎你不能在你的管道中使用watch()。相反,您应该将其用作管道的头部(而不是gulp.src())。将单个管道分成两个独立的管道解决了这个问题。

所以这(除去debug()语句简洁):

gulp.src(source + '/**/*', {base: source}) 
     .pipe(watch(source + '/**/*', {base: source})) 
     .pipe(gulp.dest(destination)); 

变为这样:

gulp.src(source + '/**/*', {base: source}) 
     .pipe(gulp.dest(destination)); 

watch(source + '/**/*', {base: source}) 
     .pipe(gulp.dest(destination)); 
相关问题