grunt-contrib-watch + sass: как указать файлы назначения?
У меня есть такой рабочий процесс:
module.exports = function(grunt) {
require('load-grunt-tasks')(grunt); // npm install --save-dev load-grunt-tasks
grunt.initConfig({
sass: {
options: {
sourceMap: true
},
dist: {
}
},
watch: {
files: ['src/*.scss'],
tasks: ['sass']
}
});
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.registerTask('default', ["sass"]);
};
После запуска grunt watch и изменения файла src/*.scss, я получаю следующее:
Файл " src / main.СКСС " изменился. Выполнение задачи" sass:dist " (sass)
Сделано, без ошибок. Завершено в 0.949 s В Вт фев 02 2016 11: 25: 11 GMT+0100 (CET) - ожидание...
Моя проблема: где сгенерированный файл? как указать файл назначения?
Я также пробовал использовать это рабочий процесс:
module.exports = function(grunt) {
require('load-grunt-tasks')(grunt); // npm install --save-dev load-grunt-tasks
grunt.initConfig({
sass: {
options: {
sourceMap: true
},
dist: {
files: [{
expand: true,
cwd: 'src',
src: ['*.scss'],
dest: '.',
ext: '.css'
}]
}
},
watch: {
files: ['*.scss'],
tasks: ['sass']
}
});
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.registerTask('default', ["sass"]);
};
И работает также grunt watch, но когда я изменяю src/*.scss, ничего не происходит..
EDIT : это мой файл grunt после ответов:
module.exports = function(grunt) {
require('load-grunt-tasks')(grunt); // npm install --save-dev load-grunt-tasks
grunt.initConfig({
sass: {
options: {
sourceMap: true
},
dist: {
files: [{
expand: true,
cwd: '.',
src: ['src/**/*.scss'],
dest: '.',
ext: '.css'
}]
}
},
watch: {
files: ['src/**/*.scss'],
tasks: ['sass']
}
});
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.registerTask('default', ["sass"]);
};
3 ответа:
Давайте предположим, что у вас есть файл
main.scssи что@importнаходится из_sassfile.scssв папкеlayout. Звучит неплохо?sass: { options: { sourceMap: true, outFile: 'dist/main.css.map' // so you get a sourceMap file }, dist: { files: { 'dist/main.css' : 'src/main.scss' } } }, watch: { files: ['src/layout/*.scss'], tasks: ['sass'] }Это означает, что
grunt watchбудет отслеживать изменения в отдельных компонентах файлов sass/scss, затем он запустит задачуsass, которая обработает все доdist/main.css.Если вы используете только 1 файл Sass, то есть
main.scssявляется вашим единственным файлом, или если вы помещаете дополнительные файлы_partial.scssSass в тот же каталог, вы можете сохранить команду watch какwatch: { files: ['src/*.scss'], tasks: ['sass'] }Последнее.
cwdдля ваших файлов Sass,src/не будет переноситься наfiles, указанный дляwatch. Итак, ваш Gruntfile искал изменения файлов в каталоге вышеsrc/во втором рабочем процессе.
Вам нужно указать выход:
module.exports = function(grunt) { require('load-grunt-tasks')(grunt); // npm install --save-dev load-grunt-tasks grunt.initConfig({ sass: { options: { sourceMap: true }, dist: { files: { //output added here 'dist/main.css' : 'src/*.scss' } } }, watch: { files: ['src/*.scss'], tasks: ['sass'] } }); grunt.loadNpmTasks('grunt-contrib-watch'); grunt.registerTask('default', ["sass"]); };Примечаниеgrunt-sass также должен поддерживать все стандартные параметры конфигурации .
С вашей первоначальной конфигурацией задача была успешно выполнена, но не нашла файлов для обработки. Если я бегу с
grunt --debug --verbose, я получаю:[D] Task source: /Users/edeustace/dev/github/edeustace/stack-overflow-questions/grunt-watch/node_modules/grunt-sass/tasks/sass.js Running "sass:dist" (sass) task [D] Task source: /Users/edeustace/dev/github/edeustace/stack-overflow-questions/grunt-watch/node_modules/grunt-sass/tasks/sass.js Verifying property sass.dist exists in config...OK File: [no files]Я думаю, вы можете считать это ошибкой вgrunt-sass .
Причина, по которой
grunt watchне срабатывает во второй конфигурации задачи grunt в вашем вопросе, заключается в том, что за неправильным путем к файлу следят.watch: { files: ['*.scss'], tasks: ['sass'] }Это только просмотр всех файлов
.scss, присутствующих в корне проекта (не внутри любой папки, как src). Вам нужно будет установить путьfilesдля watch такой же, как конфигурация задачи 1-го grunt в вашем вопросе, и он должен работатьwatch: { files: ['src/*.scss'], tasks: ['sass'] }Примечание: в случае, если есть подпапка под папкой
srcсодержащий файлы.scss, то вам придется изменить шаблон наsrc/**/*.scssв массиве watchfilesи наsrc: ['**/*.scss']в объекте sassfilesТакже во 2-й конфигурации grunt параметр
filesобъектаdestдля задачи sass установлен в.. Это создает файлы CSS в корне проекта. Чтобы сгенерировать их внутриsrcили других папок, укажите соответственноВы можете проверить рабочий пример по адресу https://github.com/pra85/grunt-sass-example (Проверьте подпапка ветвь для обработки случая вложенных папок в
src, содержащих файлы SASS)