Grunt 监视任务而不是文件?
Grunt watch for tasks instead for files?
我是 Grunt 的新手,我看过一些关于 watch 插件的教程。示例:
watch:{
sass:{
files: 'sass/*.scss',
tasks: ['sass','cssmin']
}
}
我的问题是为什么我需要关注 "sass" 之类的另一个插件而不是关注实际文件 'sass/*.scss'?
我不明白,看一个plugin/task而不是一个文件是不合逻辑的。
为什么我不能这样调用:
watch:{
files: 'sass/*.scss',
tasks: ['sass','cssmin']
}
?
如果我还想查看我的 js 文件怎么办?我是否还需要将其放入 sass 任务的文件中?将 js 文件放入 sass 任务中是没有意义的...
并不是说您是 "watching" 那个插件,而是您正在监视一组文件,并且在文件更改时 运行 正在执行任务。 tasks
规范是您指定所需任务的地方。因此,在这种情况下,您将 运行 sass 和 cssmin 任务。
你绝对不是在看插件。假设你有另一个插件 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有不同的watcher,比如uglify。
watch
插件监视与 files
部分指定的模式匹配的文件。每当更改任何匹配文件时,都会执行 tasks
中提到的任务。
例如,让我们考虑一下您问题中的 watch 任务
watch:{
sass:{
files: 'sass/*.scss',
tasks: ['sass','cssmin']
}
}
这里,sass
只是给操作起的名字。它可以是任何东西;但由于该操作编译 Saas 文件,因此该操作被命名为 saas
.
每当sass
目录中的任何scss
文件被改变时,操作saas
被触发,执行saas
和cssmin
任务,这应该早点定义。
参考文献:
我是 Grunt 的新手,我看过一些关于 watch 插件的教程。示例:
watch:{
sass:{
files: 'sass/*.scss',
tasks: ['sass','cssmin']
}
}
我的问题是为什么我需要关注 "sass" 之类的另一个插件而不是关注实际文件 'sass/*.scss'?
我不明白,看一个plugin/task而不是一个文件是不合逻辑的。
为什么我不能这样调用:
watch:{
files: 'sass/*.scss',
tasks: ['sass','cssmin']
}
?
如果我还想查看我的 js 文件怎么办?我是否还需要将其放入 sass 任务的文件中?将 js 文件放入 sass 任务中是没有意义的...
并不是说您是 "watching" 那个插件,而是您正在监视一组文件,并且在文件更改时 运行 正在执行任务。 tasks
规范是您指定所需任务的地方。因此,在这种情况下,您将 运行 sass 和 cssmin 任务。
你绝对不是在看插件。假设你有另一个插件 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有不同的watcher,比如uglify。
watch
插件监视与 files
部分指定的模式匹配的文件。每当更改任何匹配文件时,都会执行 tasks
中提到的任务。
例如,让我们考虑一下您问题中的 watch 任务
watch:{
sass:{
files: 'sass/*.scss',
tasks: ['sass','cssmin']
}
}
这里,sass
只是给操作起的名字。它可以是任何东西;但由于该操作编译 Saas 文件,因此该操作被命名为 saas
.
每当sass
目录中的任何scss
文件被改变时,操作saas
被触发,执行saas
和cssmin
任务,这应该早点定义。
参考文献: