如何设置一个观察者将文件复制到同一文件夹内的其他文件?
这是我迄今为止以及我所尝试的:
在我的应用程序中,我有一个像这样的结构的文件
/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-rename
的basename
选项。
所有这一切加起来:
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('./')); }); });