如何设置观察程序将文件复制到相同文件夹中的其他文件?

时间:2016-04-13 17:42:12

标签: javascript node.js gulp gulp-sass

这是我迄今为止所拥有的以及我所尝试的内容:

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

/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

我设置了一个像这样的观察者:

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文件时,什么都没发生。观察者似乎甚至没有开火。

有人能指出我做错了吗?

1 个答案:

答案 0 :(得分:1)

在整个项目中使用无范围的globstar **是一个坏主意。 **/ab.html与项目的所有文件夹中的ab.html匹配,包括node_modules。根据{{​​1}}中有多少嵌套文件夹,这可能需要一段时间才能完成。如果它曾经。

您从node_modules收到的file也只有绝对路径,因此您需要将当前工作目录的base option提供给gulp.watch()

最后,您只想更改gulp.src()的名称,而不是整个路径。使用file的{​​{1}}选项。

所有这些加起来:

basename