【问题标题】:Gulp-Watch on Windows 7 Issue - Node.js, NPM and Gulp installed successfullyWindows 7 上的 Gulp-Watch 问题 - Node.js、NPM 和 Gulp 安装成功
【发布时间】:2018-03-19 23:17:31
【问题描述】:

我对使用 Node.js、NPM 和所有这些现代工具来提高生产力和工作流程非常陌生。

下面是详细信息:

 Node version - v8.10.0
 Gulp CLI version - 2.0.1
 Gulp Local version -  3.9.1
 NPM version - 5.6.0
 Windows 7
 Node.js installed in D:/ProgramFiles

我尝试过使用 gulp,它在这个脚本中运行得非常好

var gulp = require('gulp'),
watch = require('gulp-watch');

gulp.task('default',function(){
console.log('Gulp task created');

});

gulp.task('html' , function() {
    console.log('Something useful here');

});

gulp.task('watch', function() {
    watch('/app/index.html', function() {
        gulp.start('html');
        });
});

所以输入 gulp 确实会以默认任务消息响应。键入 gulp html 也会以控制台消息响应。但是,当我输入 gulp watch 时,它确实适用于以下输出。

 Starting 'watch'...
 Finished 'watch' after 7.99 ms

但是每当我进行更改并保存索引文件时,cmd 都不会更新。我试过使用 Git Bash 和其他终端。我什至安装了以前的节点版本并尝试使用这些版本解决这个问题,但到目前为止还没有运气。

我尝试将依赖项编辑为旧版本,但这也不起作用。

如果有人能提供帮助,我将不胜感激。

【问题讨论】:

    标签: javascript node.js npm gulp gulp-watch


    【解决方案1】:

    更新了回调方法以结束进程以优雅退出而不使用 CTRL-C。

    gulp.task('watch',function(){
        gulp.watch('./data/index.html', function(){
        gulp.start(['someOtherGulpTask']);
        }); 
    });
    gulp.task('someOtherGulpTask', function () {
        gulp.src('./test/sometest.js')
            .pipe(gulpmocha(),setTimeout(function() {
            cb();
        }, 5000))
    });
    function cb(){
    process.exit(1);
    }
    

    原答案如下

    gulp任务的执行顺序是-

    1. 默认任务被执行,然后是后续任务,除非任务 当您在 gulp 的 cmdline 调用中特别提到要执行的 提到过 - “gulp watch”。
    2. 你可以在 gulpfile 的开头指定顺序

      gulp.task('default', ['watch']);

    3. 或者,您可以像这样明确地启动任务,

      gulp.task('default',function(done){ console.log('Gulp 任务已创建'); gulp.start('watch'); 完毕(); });

    done 是允许您等待任务完成的回调,这在您的 gulp 文件中缺失。下面是完整的 gulp 文件,您可以根据需要使用它来执行监视任务。

    var gulp = require('gulp'),
    watch = require('gulp-watch');
    
    gulp.task('default',function(done){
    console.log('Gulp task created');
    gulp.start('watch');
    done();
    });
    
    gulp.task('html' , function() {
        console.log('Something useful here');
    
    });
    
    gulp.task('watch', function() {
        watch('./data/index.html', function() {        
                console.log('Some changes done');
            });
    });
    

    【讨论】:

    • 太好了,很高兴了解更多信息。我尝试使用您的代码。这是我的结果: 开始默认... Gulp 任务已创建 开始“观察”... 8.33 毫秒后完成“观察” 15 毫秒后完成“默认” -------- 就是这样。我没有收到“完成某些更改”消息。在更改我的索引文件时,cmd 也不会用任何消息左右更新手表。我已经更正了我的文件路径,但问题仍然存在。
    • 我不熟悉 gulp-watch 库,但我认为您应该返回 watch 函数的结果。见用法。 npmjs.com/package/gulp-watch 我不喜欢使用 gulp-watch,因为 gulp 已经有一个功能。使用 gulp.watch 代替 gulp.task
    • 感谢@bumblebeen - 我尝试更改代码但不知道 gulp.watch - 也尝试过使用以下代码 gulp.task('watch', function() { gulp.watch watch('/app/index.html', function() { console.log('Some changes done'); }); }); ---- 代码有效,启动手表,但无论何时对文件进行更改,它都不会检测到。不知道为什么没有一种方法对我有用。
    • 另外,我认为没有必要在这个 gulp 任务中返回,除非我们使用任何 src、pipe 和 dest。所以这很简单,但不确定为什么它不起作用。由于我对这些东西不熟悉,所以我希望有人能真正提供帮助,我们可以一起解决这个问题。
    • 不要使用绝对路径 '/app/index.html',使用相对路径,例如 './app/index.html' 或通配符,例如 ''app/**/*.html"
    【解决方案2】:
    gulp.task('watch', function () {
      gulp.watch('./data/index.html', ['html']);
    });
    

    避免使用 gulp.start,它没有被记录或推荐。

    【讨论】:

    • 感谢马克的回复。我试过了,正是上面@bumblebeen 建议的。该代码足以启动监视,但只要对文件进行更改,它就不会检测到它,也不会更新 CMD。不知道为什么没有一种方法对我有用。
    • watch glob: './data/index.html' 与您的 gulpfile.js 位置相关。那么,gulpfile.js 是不是就在 data 文件夹的上方?
    • 是的,gulpfile.js 就在 app 文件夹的上方。我也将其重命名为 app.作为一个新手,我对能够进一步解决问题的了解不多。所以我只好过来问你。
    猜你喜欢
    • 1970-01-01
    • 2014-07-31
    • 1970-01-01
    • 1970-01-01
    • 2017-03-30
    • 2019-05-31
    • 1970-01-01
    • 2016-02-14
    • 2018-08-14
    相关资源
    最近更新 更多