【问题标题】:How can I get gulp to pause while a folder is unavailable?当文件夹不可用时,如何让 gulp 暂停?
【发布时间】:2020-05-28 04:05:02
【问题描述】:

我正在使用 gulp 监视多个文件夹中的更改并将它们同步到一组目标。但是在构建过程中,我的一个源文件夹(“dist”)被删除并重新创建,这破坏了gulp.watch,所以我必须中断并重新启动该过程。

通过将其添加到我的任务顶部,我能够避免错误:

gulp.task("home", function() {
    // Added this code
    var fs = require("fs")
    if (!fs.existsSync(sourceFolder)) {
        console.log("Dist folder temporarily unavailable, probably building...")
        return gulp
    }
    // Original task
    return gulp
        .src(sourceFolder)
        .pipe(changed(destFolder))
        .pipe(gulp.dest(destFolder))
})

...

gulp.task("watch", function() {
    gulp.watch(sourceFolder, { interval: 500 }, gulp.series(["home"]))
})

但是现在,一旦构建过程完成并且 dist 文件夹返回,任务不会再次触发,因此新文件不会被复制到目标。我没有收到任何其他错误。

有什么想法吗?我能想到的最好的办法是gulp.watch 正在缓存sourceFolder 的句柄,因此删除并重新创建文件夹会使其失去对文件夹的跟踪,因此它看不到新的文件夹和文件。

【问题讨论】:

  • 需要删除dist吗?您的构建任务能否不单独留下dist,只删除其中的文件?
  • 更多关于“构建”期间发生的事情的信息会很有用。
  • 我正在使用 VueJS CLI 构建一个 Web 应用程序,它通过删除和替换文件夹来干净地构建到 dist 文件夹中。我设置了两个任务,一个监视该文件夹中的文件并执行一个操作,另一个任务(都类似于上面的代码)监视dist 的子文件夹。但是我想要一个干净的构建——我不希望旧的工件坐在那里并继续同步到我的目标文件夹。

标签: vue.js gulp vue-cli gulp-watch


【解决方案1】:

我实际上在早上早些时候遇到了类似的问题,我认为您有两种选择

选项 1

不要使用 gulp.watch,而是使用 gulp-watch。如果我没记错的话,gulp.watch 不会监视新添加的文件,而 gulp-watch 会。

然后,使用gulp-plumber 来防止因错误而停止(例如当您的 dist 文件夹丢失时)

选项 2

升级到latest gulp version。事情发生了一点变化,但它们绝对更干净。在那里,gulp 的 watch 方法没有上述问题,您不需要水管工,因为它不会在出错后停止程序的执行。

这是我早上早些时候做的,非常简单。我想这将取决于您的 gulpfile 有多大以及您拥有的时间。

--

希望对你有帮助

谢谢,

【讨论】:

  • 对不起@Jair-reina,我一直在使用最新版本的gulp(目前是4.0.2),watch 方法肯定仍然存在这个问题。我能够使用 allowEmpty 选项抑制 src() 函数的错误消息,但是当沿 glob 路径的文件夹被删除时,监视函数只会停止监视。我终于放弃了,并在构建工具中找到了一个隐藏选项来删除 dist 文件夹,但这是次优的,因为它使我的分发文件夹中留下了以前构建的工件(构建中的文件名包括哈希解决浏览器缓存问题)。
猜你喜欢
  • 2016-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-05
  • 2020-08-06
  • 1970-01-01
  • 1970-01-01
  • 2014-12-30
相关资源
最近更新 更多