【问题标题】:Grunt watch plugin does not display UglifyJS abort messageGrunt watch 插件不显示 UglifyJS 中止消息
【发布时间】:2013-02-20 07:57:49
【问题描述】:

grunt-contrib-watch 插件提供了很好的自动构建功能,但在某些情况下不显示来自任务的警告消息,这是我的 grunt.js:

    min: {
        app: {
            src: [
                'some.js',
            ],
            dest: 'some.min.js'
        },
    }

    watch: {
        app: {
            files: 'some.js',
            tasks: ['min:app']
        },
    }

如果来源没问题,那么一切顺利;但是当 UglifyJS 中止时:

直接运行 grunt min:app

Running "min:app" (min) task
Minifying with UglifyJS...ERROR
[L360:C46] Unexpected token name, expected punc (position: 8529)
<WARN> UglifyJS found errors. Use --force to continue. </WARN>

Aborted due to warnings.

通过 watch 插件自动构建

Waiting...OK
>> File "some.js" changed.
Running "min:app" (min) task

因此,如果不查看输出本身,就无法知道构建是否成功。

使用 css less 的类似设置确实会向 CLI 显示错误,我想知道是否需要将某些内容传递给 grunt/watch plugin/uglify 以使其工作?

【问题讨论】:

  • 您在运行 grunt watch 时是否在同一位置出现错误?
  • 不确定我是否得到你的问题:问题是 grunt watch 没有告诉我是否有错误。两个错误/成功都会导致我在上面引用的相同消息(第三个引用)。只有手动运行 grunt min task 才会显示错误 - 我当然可以修复它,但它违背了 watch 插件的目的。
  • 抱歉,刚刚误解了您的问题。澄清一下,watch 不会自动构建,Uglify 会。 Watch 只是一个开发工具。
  • 你是对的,我只是想了解为什么 watch 不会将错误消息从 uglify 传递到 cli。
  • uglify 应该只在构建阶段通过管道将错误传递给 cli,您可以通过在 cli 中运行 grunt min 来初始化。你应该在开发过程中运行grunt watch,它会持续监控监视的文件和管道错误(或保存后的成功)到你的cli。但是,您配置 watch 的方式,所有运行 watch 的操作都是运行 uglify,这是您的构建工具,这违背了 watch 的目的。我会从手表配置中完全删除 min 命令。

标签: node.js build-automation gruntjs


【解决方案1】:

Watch 使用了 jshint,您需要确保 jshint 配置正确,然后将其添加到您的 grunt 任务中以执行 watch 命令。将 jshint 任务添加到您的监视任务中,并且还包括 jshint 的配置选项(示例如下):

 jshint: {
   all: [
    'Gruntfile.js',
    'some.js'
  ],
  options: {
    jshintrc: '.jshintrc'
  }
},
// minification options here
watch: {
  scripts: {
    files: 'some.js',
    tasks: ['jshint']

 }
}

【讨论】:

  • 我认为 jshint 只是另一个贡献插件? min 是 v0.3 的内置多任务,我认为它可以与 watch 插件一起使用,就像 css LESS 任务(有效)..
  • 我知道当我使用 grunt watch 的时候,我配置了 jshint,我没有贡献它,配置它有点类似于上面。这直接来自 github 上的 contrib-watch 文档:github.com/gruntjs/grunt-contrib-watch/blob/master/Gruntfile.js,我见过 grunt watch 运行的每个示例,它都是使用 jshint 配置的
【解决方案2】:

看起来 Grunt v0.3.x + grunt-contrib-watch v0.1.4 确实是问题所在......

https://github.com/gruntjs/grunt-contrib-watch/issues/19

https://github.com/gruntjs/grunt-contrib-watch/issues/7

(编辑:升级到 Grunt v0.4.x + grunt-contrib-watch v0.2.x 后,问题得到解决;虽然我应该注意到这是一个破坏性升级,大多数 v0 .3 插件尚未转换为支持 Grunt v0.4)

我也关闭了他们的回购协议,供参考:https://github.com/gruntjs/grunt-contrib-watch/issues/51

【讨论】:

  • 尽管投了反对票,但我仍将此标记为我的答案,因为问题显然存在(我的配置是正确的)。如果您有更好的答案,请继续向 github 问题报告。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-09
  • 2022-08-22
  • 2016-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-23
相关资源
最近更新 更多