【问题标题】:Gulp 4 watch task is not detecting changesGulp 4 监视任务未检测到更改
【发布时间】:2019-06-12 00:05:38
【问题描述】:

我正在尝试从 Gulp 版本 3 切换到 Gulp 版本 4,但我经常遇到监视任务问题,当跟踪的 SCSS 文件更改时,它不会检测到更改。我做了一个简单的 watch 函数示例,因为它更容易调试。

Ubuntu 17.10
Node v8.9.4
Npm 6.9.0
Gulp CLI version: 2.2.0
Gulp Local version: 4.0.2

我尝试完全删除 gulp 和 gulp-cli 并重新安装,删除 node_modules 文件夹并从头开始创建 package.json 文件,但结果是一样的。 “开始‘看’……”没有别的了。

package.json

    {
      "name": "starter",
      "version": "1.0.0",
      "description": "",
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "author": "",
      "license": "ISC",
      "devDependencies": {
        "gulp": "^4.0.2",
        "gulp-sass": "^4.0.2"
      }
    }

gulpfile.js

const {src, dest, watch} = require('gulp');
const sass= require('gulp-sass');

function style() {
    return src('./scss/**/*.scss')
        .pipe(sass())
        .pipe(dest('./css'));
}

function watchTask() {
    watch('./scss/**/*.scss', style);
}

exports.style = style;
exports.watch = watchTask;

注意:样式任务正常工作,并将所有.scss 文件从源移动到目标。

非常感谢任何帮助,因为我的想法已经不多了。

【问题讨论】:

  • 假设您正在运行 gulp watch 尝试稍微修改为 watch('./scss/**/*.scss', gulp.series(style)); 并将 series 添加到您的要求中。有时这似乎有帮助,尽管它不应该是必要的。
  • 您的原始代码非常适合我。那些路径是正确的?并且相对于这个 gulpfile.js 的位置?
  • 看起来只有当有某种类型的映射/同步文件夹与 vagrant/docker 时才会出现问题。我正在使用 vagrant,{usePolling: true} 让我很开心。

标签: javascript gulp gulp-watch gulp-4


【解决方案1】:

gulp watch 在启动后检测到更改,而不是在这次运行和最后一次运行 gulp watch 之间。

无论如何,你都需要告诉 gulp watch 运行第一个样式任务。

function watchTask() {
  watch('./scss/**/*.scss', {ignoreInitial: false}, style);
}

然后,只要你再次触摸某个 scss 文件,它就会重新运行样式任务。

更新:

您使用的是 docker 还是网络映射磁盘上的文件?您可能需要打开{usePolling: true},如文档所述“通过网络或其他非标准情况成功观看文件所需。”

【讨论】:

  • 通过添加 {ignoreInitial: false} 选项,它最初运行“样式”任务,现在很好。但是当我对 .scss 文件进行一些更改时,我仍然遇到问题,它不会检测到更改并再次执行“样式”任务。
  • 添加 {usePolling: true} 以观看配置在我的情况下有效。顺便说一句,我正在使用 vagrant 同步文件夹。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2020-10-26
  • 2016-02-11
  • 1970-01-01
  • 2016-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多