あるファイルから別のファイルへの依存関係をたどる方法があるかどうかはわかりませんが、.scss
ファイルの変更を監視してから、sass タスクを実行してテーマ ファイルを更新できます。
したがって、sass タスクは次のようになります。
sass : {
build: {
files : {
'path/to/compiled-foo.css': 'path/to/theme-foo.scss',
'path/to/compiled-bar.css': 'path/to/theme-bar.scss',
// Or more generally
'path/to': 'path/to/theme-*.scss',
}
}
},
そして、次のような監視タスク:
watch : {
themes: {
files : [ 'path/to/_main.scss' ],
tasks : [ 'sass' ],
options : {
// You may change these to better suit your needs
spawn : false,
interrupt: true,
livereload: true
},
},
},
これの欠点は、変更するたびにすべてのテーマがコンパイルされることです_main.scss
. さまざまなテーマを監視する別のファイルがある場合は、内部にさらに多くのタスクを含めることができます (別のタスクを作成して呼び出すwatch
代わりに(例:または)、そのテーマだけを再コンパイルします。themes
theme_foo
theme_bar
sass:theme_foo
sass:theme_bar
grunt watch
特定のタスクで実行することもできます: grunt watch theme_foo
、これは更新されませんtheme_bar
が、theme_foo
.
編集: をモジュール化して_main.scss
、_foo.scss
、_bar.scss
および_common.scss
にし、_common.scss
変更がすべてのテーマに影響する_foo.scss
場合と、 にのみ影響する場合に変更できtheme_foo
ます。このようにして、変更された場合にのみ監視_foo.scss
および更新できます。theme_foo
または変更時にすべてのテーマを更新します_common.scss
。
編集 2 (コメントに基づく): blueとred
の 2 つのテーマがあるとします。2 つの sass タスク (テーマごとに 1 つ) があります。
sass : {
red: {
files : {
'path/to/compiled-red.css': 'path/to/theme-red.scss',
}
},
blue: {
files : {
'path/to/compiled-blue.css': 'path/to/theme-blue.scss',
}
},
},
現在、実行grunt sass
すると両方のテーマが更新されます。ただし、実行grunt sass red
すると、赤いテーマだけが更新されます。
必要なテーマだけをwatch
更新するには、次の 2 つのタスクがあります。
watch : {
red: {
files : [ 'path/to/theme-red.scss' ],
tasks : [ 'sass:red' ],
options : { /* ... */ },
},
blue: {
files : [ 'path/to/theme-blue.scss' ],
tasks : [ 'sass:blue' ],
options : { /* ... */ },
},
},
red
呼び出しに注意してくださいsass:red
(そのテーマのタスクとそのテーマのみ)。blue
を呼び出しても同じことが起こりsass:blue
ます。
変更時にすべてのテーマを更新するに_main.scss
は、内部にもう 1 つのタスクを追加しますwatch
。
watch : {
red: {
files : [ 'path/to/theme-red.scss' ],
tasks : [ 'sass:red' ],
options : { /* ... */ },
},
blue: {
files : [ 'path/to/theme-blue.scss' ],
tasks : [ 'sass:blue' ],
options : { /* ... */ },
},
all: {
files : [ 'path/to/_main.scss' ],
tasks : [ 'sass' ],
options : { /* ... */ },
},
},
今all
、あなたの を監視しています_main.scss
。それが変更されると、 のすべてのタスクsass
が実行されます (つまりsass:red
、 とsass:blue
)。