LoginSignup
6
6

More than 5 years have passed since last update.

Gruntfileでのwatch定義の書き方のアンチパターン

Posted at

Gruntのwatchタスクの定義の書き方で上手く行かなかったのでメモ。

つまづいた点

共通のSCSS/JSと、カテゴリ(ページ)内で使うSCSS/JSのいずれかが更新されたときにそのカテゴリに紐づくtaskを実行したいとして、下記のように書いてしまうと、共通SCSS/JS更新の際にすべてのtaskが発火しなかった。

Gruntfile.js(一部)

watch: {
    watch01: {
        files: [
            'src/common/scss/*.scss',   //共通SCSS
            'src/common/js/*.js',       //共通JS
            'src/category01/scss/*scss',
            'src/category01/js/*js'
        ],
        tasks: ['task01']
    },
    watch02: {
        files: [
            'src/common/scss/*.scss',   //共通SCSS
            'src/common/js/*.js',       //共通JS
            'src/category02/scss/*scss',
            'src/category02/js/*js'
        ],
        tasks: ['task02']
    },
    //   : (略)
}

解法

下記のように、共通SCSS/JSを監視するwatchとカテゴリごとのwatchとを分けておくと、
期待通りの実行内容になる。

Gruntfile.js(一部)
watch: {
    watch_default: {
        files: [
            'src/common/scss/*.scss',
            'src/common/js/*.js',
        ],
        tasks: ['default']
    },
    watch01: {
        files: [
            'src/category01/scss/*scss',
            'src/category01/js/*js'
        ],
        tasks: ['task01']
    },
    watch02: {
        files: [
            'src/category02/scss/*scss',
            'src/category02/js/*js'
        ],
        tasks: ['task02']
    },
    //   : (略)
}

よく考えれば上の例は変な書き方をしていたなあと思いましたが、
またうっかりやりそうなのでメモしておきます。

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6