如何设置一个观察者将文件复制到同一文件夹内的其他文件?

这是我迄今为止以及我所尝试的:

在我的应用程序中,我有一个像这样的结构的文件

/app/learn/content/ab.html /app/learn/content/bc.html /app/learn/content/base.html /app/write/content/ab.html /app/write/content/bc.html /app/write/content/base.html /app/xx/ab.html /app/xx/bc.html /app/xx/base.html 

我build立了一个像这样的观察者:

 var abc = { src: [ '**/ab.html', '**/bc.html', ], } gulp.task('watchHTMLs', function () { gulp.watch(abc.src, function (file) { return gulp.src(path.basename(file.path)) .pipe(rename('base.html')) .pipe(gulp.dest('./')); }) }); 

我想要做的是观察具有ab.html或bc.html文件名的文件,然后在发生更改时将这些文件拷贝到base.html中的相同目录中。 但是到目前为止,我的观察者开始了,但是当我改变其中一个ab.html或bc.html文件的时候,什么也没有发生。 守望者似乎甚至没有开火。

任何人都可以指出我在做什么错?

在你的整个项目中使用无标题的globstar **是一个坏主意。 **/ab.html与您项目的所有文件夹(包括node_modules **/ab.html相匹配。 根据node_modules有多less嵌套的文件夹,这可能需要花费一些时间才能完成。 如果它曾经。

另外,你从gulp.watch()收到的file只有一个绝对path,所以你需要将当前工作目录下的base选项提供给gulp.src()

最后你只想改变file的名字,而不是整个path。 使用gulp-renamebasename选项。

所有这一切加起来:

 var abc = { src: [ 'app/**/ab.html', 'app/**/bc.html' ], }; gulp.task('watchHTMLs', function () { gulp.watch(abc.src, function (file) { return gulp.src(file.path, { base: process.cwd() }) .pipe(rename({basename:'base'})) .pipe(gulp.dest('./')); }); }); 
Interesting Posts