【问题标题】:Grunt watch not running less after error correction纠错后 Grunt watch 没有运行更少
【发布时间】:2016-05-06 08:59:44
【问题描述】:

我遇到了一个问题,即 Grunt Watch 在编译错误纠正后目前无法重新运行任务。

我收到错误消息,但在纠正错误后,grunt 说文件已更改,但在那之后没有运行任何任务。

咕噜文件:

watch: {
        less: {
            files: ['public/assets/less/**/*.less'],
            tasks: ['css'],
            options: {
                atBegin: true,
                nospawn: true
            }
        },
        scripts: {
            files: [
                'public/assets/js/homepage.js'
            ],
            tasks: ['jsApp'],
            options: {
                nospawn: true,
            }
        }
    },

错误日志:

>> ParseError: Unrecognised input in public/assets/less/template.less on line 114, column 31:
>> 114         @media screen and (max-width: 767px) {
>> 115             left: 0;
Warning: Error compiling public/assets/less/main.less
// ----- Corrected the file here, saved again -----
>> File "public/assets/less/template.less" changed.

文件结束。在此之后没有任何内容。

【问题讨论】:

  • 我有这个确切的问题,在任何地方都找不到有关此的任何信息。看在上帝的份上,如果你找到了解决办法,请告诉我。如果您将 nospawn 设置为 false,这不再是问题,但对我来说,它会使 LESS 编译减慢整整 1.5 秒,这非常烦人。
  • 您可以发布以下代码: template.less 、 main.less 和您的完整 grunt 文件吗?我会尝试帮助
  • @Raduken 文件本身不是问题,触发了这个错误,我更正并保存了它,但是 Grunt 检测到了更改,但实际上并没有再次触发任务。
  • 但以防万一你能上传我也很好奇的文件,看看我能不能解决这个问题:)
  • 不幸的是,我没有这些文件了,因为代码在 3 天内发生了很大变化。我确切地知道错误是什么,我在上面的行中错过了一个 },导致它无法识别下一行。

标签: javascript gruntjs grunt-contrib-watch


【解决方案1】:

这是 grunt-contrib-watch 包 spawn 功能的问题,您可能想要删除 nospawn。如果您还没有尝试过 1.0.0 版的 grunt watch,您可能想尝试一下。

这个问题之前已经讨论过了 https://github.com/gruntjs/grunt-contrib-watch/issues/58

另外,请注意文档:

不生成任务运行会使手表更容易失败,因此 请根据需要使用。

在你的位置上,我会先升级,看看我有最新版本的 grunt、grunt watch 和 grunt less。如果这不能解决问题,我就让它正常生成。

【讨论】:

  • 抱歉,过了一段时间才回复。试过这个,它不再因错误而失败,但该过程需要很长时间才能执行grunt watch,超过 30 秒。它没有做任何过于复杂的事情,nospawn 更快(最多一两秒)
  • 我会将其标记为答案,尽管它确实解决了问题,尽管产卵速度很慢。
【解决方案2】:

你可以像这样简化你的文件:

//src ===============================
                var src;
                config.src = src = {
                     libFolder       : 'lib/**/*.js',
                     lessFolder      : 'less/**/*.less',

                };

//Watch ===============================
                config.watch = {
                     scripts: {
                        files: ["<%= src.libFolder %>", "<%= src.lessFolder %>"]
                        ,tasks: ["dev", "less:dist"]

                     }
                }

您需要插入要观看的任务和文件:

在上述情况下,grunt 会查看 lib 和 less 文件夹中的所有文件,如果我在其中进行任何更改,grunt 将运行该任务。

您还需要插入要运行的任务,直到您停止 grunt watch。

在这种情况下,我同时运行 dev ans less:dist。

我正在运行的开发人员:'sprite','imagemin','concat:dev', 'uglify',

grunt.registerTask('dev',['sprite','imagemin','concat:dev', 'uglify']);

所以我在 grunt watch 中插入了这个任务,所以 grunt 将无误地监视所有任务的运行。

希望对你有所帮助。

【讨论】:

  • 不幸的是,这只是一种简单的配置方式,并不能解决我的问题。配置错误后 Grunt 仍然不会执行 LESS。
  • 所以错误可能出在较少的任务中?尝试使用 grunt watch 运行 grunt -v 和 --force 看看你得到了什么。
  • 试过了,不幸的是还是一样。
【解决方案3】:

我遇到了完全相同的问题(grunt-contrib-watchgrunt-contrib-less 的组合)。

一个解决方案设置为spawn: true,但构建时间变得更长。

我发现在使用最新版本的 grunt-contrib-less 时会出现此问题(自 1.0.0 以来的所有版本)。使用 grunt-contrib-less 0.12.0 在更正错误后成功继续观看没有问题。

【讨论】:

  • 我也发现了这个,构建时间要长很多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-29
  • 1970-01-01
  • 2019-05-06
  • 2015-06-04
  • 2013-08-29
  • 2019-07-01
相关资源
最近更新 更多