在 laravel 5 中使用长生不老药时,如何防止 gulp 手表崩溃(例如停止观看)?

How do I prevent gulp watch from crashing (e.g. stop watching) when using elixir in laravel 5?

所以我很喜欢灵药

但是当我 运行 gulp 观看和写入 css(准确地说是 scss)时,它在保存几次后崩溃,因此迫使我开始gulp再看一遍。这让我发疯,几乎到了无法完成工作的地步。

我看过 Whosebug 上有类似问题的人,但没有成功。我还找到了一些这样的文章:http://maximilianschmitt.me/posts/prevent-gulp-js-from-crashing-on-error/

但是他们的解决方案已经过时了,或者我太笨了无法正确使用他们的解决方案。很有可能是后者...

这是我的 gulp.js 文件:

var elixir = require('laravel-elixir');

elixir(function(mix) {
    mix
    .sass('styles.scss', 'public/css')
    .scripts(null,
        'public/js/all.js',
        'resources/assets/js'
    )
    .version([
        'public/css/styles.css',
        'public/js/all.js'
    ])
});

有什么解决办法吗?

问题

gulp watch 设置为在检测到错误时停止,因此需要手动重启 gulp 手表。刺激。

解决方案(不优雅,但有效)

首先,我的 gulp.js 现在是:

var gulp        = require('gulp'),
    elixir      = require('laravel-elixir'),
    plumber     = require('gulp-plumber');

gulp.task('default', function() {
});

gulp.task('watch', function() {
    gulp.watch('resources/**', ['default']);
    elixir(function(mix) {
        mix
        .sass('styles.scss', 'public/css')
        .scripts(null,
            'public/js/all.js',
            'resources/assets/js'
        )
        .version([
            'public/css/styles.css',
            'public/js/all.js'
        ])
    }).pipe(plumber());
});

我做了什么:

  1. 我安装了 gulp 管道工 $ npm install --save-dev gulp-plumber
  2. 我需要 gulp 水管工和基础 gulp 对我的 gulp 文件的依赖
  3. 我定义了一个空的默认任务,不然gulp不跟我玩...
  4. 我创建了一个名为 "watch" 的 gulp 任务,否则 gulp watch 将无法像以前那样在命令行中工作。
  5. 我定义了 gulp.watch() 来制作 gulp,嗯,看?
  6. 如果我的长生不老药起作用了,我在最后附加了.pipe(plumber());。管道工是防止 gulp 观察者因错误
  7. 而崩溃的东西

所以,为了方便您,将下面的代码复制粘贴到您的 gulp.js 文件中,运行 $ npm install --save-dev gulp-plumber,然后填写您自己的组合

var gulp        = require('gulp'),
    elixir      = require('laravel-elixir'),
    plumber     = require('gulp-plumber');

gulp.task('default', function() {
});

gulp.task('watch', function() {
    gulp.watch('resources/**', ['default']);
    elixir(function(mix) {
        //Your own elixir code as you know it.
    }).pipe(plumber());
});

请注意,当您 运行 gulp watch 时,您将在命令行/终端中收到错误消息。忽略它。尝试保存一个 scss 或 js 文件,重新加载 brwoser,你会看到 gulp 并且 elixir 正在做他们的工作。

错误:

收获!!!

  1. 运行 gulp 现在什么都不做。
  2. 如果您犯了语法错误,观察程序会停止,直到您修复错误。但是,您不必手动重新启动它。说,如果你错过了;在你的 scss 中,它会在你添加 ; 后立即再次工作。并保存。

注意:这是一个 hack。不是很优雅。但它有效。根据 contra 在这个线程中: https://github.com/gulpjs/gulp/issues/71 gulp v.4.x.x 应该解决 gulp watch crashing on finding an error

的问题