【问题标题】:Grunt watch for tasks instead for files?Grunt 监视任务而不是文件?
【发布时间】:2015-07-14 21:57:37
【问题描述】:

我是 Grunt 的新手,我看过一些关于手表插件的教程。例子:

watch:{
 sass:{
  files: 'sass/*.scss',
  tasks: ['sass','cssmin']
 }
}

我的问题是为什么我需要关注像“sass”这样的另一个插件,而不是关注实际的文件“sass/*.scss”?

我不明白,看插件/任务而不是文件是不合逻辑的。

为什么我不能这样打电话:

watch:{
      files: 'sass/*.scss',
      tasks: ['sass','cssmin']
    }

?

如果我还想查看我的 js 文件怎么办?我是否还需要将它放在 sass 任务的文件中?将 js 文件放入 sass 任务中是没有意义的……

【问题讨论】:

    标签: javascript sass gruntjs


    【解决方案1】:

    您绝不是在看插件。假设您有另一个插件 less,您想处理一组不同的文件。你会怎么做?

    watch {
        sass: ...
    
        less: ...
    
        uglify: ...
    }
    

    即使你把 js 文件和 sass 放在一起(忽略这是可怕的做法),当 grunt 对该文件调用 sass 时,什么也不会发生。

    举个例子

    module.exports = function (grunt) {
    
        grunt.initConfig({
    
            jshint: {
                // ...
            },
    
            uglify: {
                // ...
            },
    
            sass: {
                // ...
            },
    
            foo: {
                // ...
            },
    
            watch: {
                javascript: {
                    files: 'javascripts/*/**.js',
                    tasks: ['jshint', 'uglify']
                },
                sass: {
                    files: 'sass/*/**.scss',
                    tasks: ['sass', 'foo']
                }
            }
    
        });
    
        // ...
    
    };
    

    js 有不同的观察者,比如 uglify。

    【讨论】:

    • 所以我不需要为两者指定确切的关键字,我的意思是它可以代替 sass,mySass?或者不是更少,而是 myLess?
    • @GigiIonel foo bar,随便你。规格略有不同。虽然 grunt 会将这些记录在输出中,但还是要注意可修改性。
    • 啊啊,现在我明白了,这有点令人困惑……谢谢!
    【解决方案2】:

    这并不是说您在“观看”该插件,而是您正在观看一组文件并在文件更改时运行任务。 tasks 规范是您指定所需任务的地方。因此,在这种情况下,您将运行 sass 和 cssmin 任务。

    【讨论】:

    • 所以你的意思是'sass'关键字可以是任何东西?我的意思是我可以这样写:{keyword:{files:....}} ?
    • 好吧,我什么都不确定(我以前从未尝试过),但我用all: 写我的监视任务,而你有sass
    【解决方案3】:

    watch 插件监视与files 部分指定的模式匹配的文件。每当更改任何匹配文件时,都会执行tasks 中提到的任务。

    例如,让我们考虑您问题中的 watch 任务

    watch:{
        sass:{
            files: 'sass/*.scss',
            tasks: ['sass','cssmin']
        }
    }
    

    这里,sass 只是为操作指定的名称。它可以是任何东西;但由于该操作编译的是Saas文件,所以该操作命名为saas

    每当sass目录中的任何scss文件发生变化时,都会触发saas操作,执行saascssmin任务,这应该在前面定义。

    参考资料:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多