gulp.dest() 不会导致文件更新
gulp.dest() does not result in file updates
给定以下目录结构:
<project>
|- src
|- gen
|- target
我们有一个 Gulp 构建链,它为我们执行整个前端构建。中间结果放在gen目录下,最终结果放在target目录下
在开发过程中,我们希望监控 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:'}));
});
}
};
当我更新源文件时,构建链会触发并将更新结果放入 target 目录中。但是更新不会同步到单独的 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
似乎在 target 目录中重新生成了文件,并且 gulp-watch 包获取了重新生成的文件。但是文件不是由 gulp.dest() 函数写入的?!
这里可能发生了什么?
经过反复试验,您似乎无法在管道中间使用 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));
给定以下目录结构:
<project>
|- src
|- gen
|- target
我们有一个 Gulp 构建链,它为我们执行整个前端构建。中间结果放在gen目录下,最终结果放在target目录下
在开发过程中,我们希望监控 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:'}));
});
}
};
当我更新源文件时,构建链会触发并将更新结果放入 target 目录中。但是更新不会同步到单独的 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
似乎在 target 目录中重新生成了文件,并且 gulp-watch 包获取了重新生成的文件。但是文件不是由 gulp.dest() 函数写入的?!
这里可能发生了什么?
经过反复试验,您似乎无法在管道中间使用 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));