【问题标题】:Gulp 4 watcher is running but does not detect changesGulp 4 watcher 正在运行但未检测到更改
【发布时间】:2016-02-11 02:53:26
【问题描述】:

我的文件结构如下:

/ src
  -- app.less
/ gulp
  -- index.js
-- gulpfile.js

这个文件结构被挂载在 /vagrant 的一个 vagrant box 中,这意味着 app.less 的路径变成了 /vagrant/src/app.less。 是的,我已经检查过了。

gulpfile.js

require('./gulp');

index.js

var paths = {
    less: '/vagrant/src/app.less'
};

gulp.task('less', function () {
    console.log('less function running');

    return gulp.src(paths.less)
        .pipe(less());
});

gulp.task('watch:styles', function () {
    console.log('watch function running');

    gulp.watch(paths.less, gulp.series('less'));
});

gulp.task('watch', gulp.parallel('watch:styles'));

gulp -v 返回:

[10:02:05] CLI version 0.4.0
[10:02:05] Local version 4.0.0-alpha.1

gulp watch 返回:

[09:45:20] Using gulpfile /vagrant/gulpfile.js
[09:45:20] Starting 'watch'...
[09:45:20] Starting 'watch:styles'...
watch function running

我已经使用 Gulp 4 两个多月了,观察者没有问题。自上周以来,观察者没有响应正在更改的文件。我尝试了几个编辑器,我尝试了多个路径,例如 '/vagrant/**/*.less' 和 '../src/*.less' ,甚至是 app.less 的绝对路径 '/vagrant/src /app.less',它们都不起作用。

经过一些研究,我在 Gulp 4 的 github repo 上发现了几个关于 watcher 的问题。然而,我无法弄清楚问题是什么。也许我忽略了我的代码中的错误或文档中的新内容,但我从昨天早上开始尝试解决这个问题,但没有任何运气。

【问题讨论】:

    标签: gulp watch


    【解决方案1】:

    看来您正在使用 Vagrant。如果你在 Vagrant 机器上而不是在主机上运行 Gulp,它不会检测到你在主机上对文件所做的任何更改。这是因为通知操作系统有关文件系统更改的事件不会传播到 VM。

    如果是这种情况,解决方案是在您实际更改文件的任何位置运行 Gulp(即,如果您在 VM 上进行更改,则在 VM 上运行它,如果您在主机上进行更改,则运行Gulp 在主机上)。

    也可以使路径相对,而不是将您的实现绑定到您的 Vagrant 框。即less: './src/app.less'

    【讨论】:

    • 这证实我看错了方向。这不是 gulp,而是在我的 VM 中挂载文件的方式。在我的虚拟机外运行 gulp watch 工作正常。我现在要进一步调查,我知道我必须看哪里。谢谢!
    • 还有其他解决方案吗?我之所以问是因为我专门使用 Vagrant,因为我需要在 Linux 上执行管道(由于本机代码),但我的编辑器正在 OSX 上运行。
    • 嗯,你可以投票,但速度会很慢。可能已经有库或至少有关于如何做到这一点的教程,但基本要点是,给某些东西一个路径和一个要执行的回调,它采用路径,并运行一个永无止境的循环来检查更改(以某种方式),然后在每次检测到更改时运行回调。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-01
    • 1970-01-01
    • 2020-10-26
    • 1970-01-01
    • 2019-08-28
    相关资源
    最近更新 更多