我有这个工作流程:
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.scss”已更改。运行“sass:dist”(sass)任务
完成,没有错误。 2016年2月2日星期二11:25:11在0.949s完成 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
时没有任何事情发生..
编辑:这是我答案后的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"]);
};
答案 0 :(得分:2)
假设您在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
任务,该任务将处理所有内容到{{ 1}}。
如果您只使用1个Sass文件,即dist/main.css
是您唯一的文件,或者如果您要在同一目录中添加其他main.scss
Sass文件,则可以保留看命令为
_partial.scss
最后一件事。您的Sass文件的watch: {
files: ['src/*.scss'],
tasks: ['sass']
}
cwd
不会延续到您为src/
指定的files
。因此,您的Gruntfile在第二个工作流程中查找文件更改watch
上方的目录。
答案 1 :(得分:1)
您需要指定输出:
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 --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中的一个错误。
答案 2 :(得分:1)
在您的问题中,grunt watch
未在第二个grunt任务配置中触发的原因是由于正在监视的文件路径错误。
watch: {
files: ['*.scss'],
tasks: ['sass']
}
这只会监视项目根目录中的所有.scss
个文件(不在 src 之类的任何文件夹中)。您需要设置files
监视路径,与问题中的第一个grunt任务配置相同,并且它应该可以正常工作
watch: { files: ['src/*.scss'], tasks: ['sass'] }
注意:如果src
文件夹下包含.scss
个文件的子文件夹,则您需要将模式更改为src/**/*.scss
39; s files
数组和src: ['**/*.scss']
files
对象中的files
同样在第二个grunt配置中,sass任务的dest
对象.
选项设置为src
。这将在项目的根目录中生成CSS文件。要在src
或其他文件夹中生成它们,请相应指定
您可以在https://github.com/pra85/grunt-sass-example查看工作示例(检查subfolder分支以处理包含SASS文件的WebDriver
中嵌套文件夹的情况)