在运行express服务器时,如何通过grunt watch执行compass?
当我运行“grunt服务器”时,一切都会执行,包括编译我的Sass。在保留express和livereload server的功能的同时,我应该如何继续观察Sass的变化并执行compass 当我更改文件时,包括livereload在内的一切都能正常工作,唯一不能正常工作的是在我更改Sass文件时执行compass重新编译。它甚至检测到更改,但不运行它 我附加了Grunfile的相关部分,只是为了尽可能短在运行express服务器时,如何通过grunt watch执行compass?,express,gruntjs,yeoman,compass-sass,livereload,Express,Gruntjs,Yeoman,Compass Sass,Livereload,当我运行“grunt服务器”时,一切都会执行,包括编译我的Sass。在保留express和livereload server的功能的同时,我应该如何继续观察Sass的变化并执行compass 当我更改文件时,包括livereload在内的一切都能正常工作,唯一不能正常工作的是在我更改Sass文件时执行compass重新编译。它甚至检测到更改,但不运行它 我附加了Grunfile的相关部分,只是为了尽可能短 'use strict'; var LIVERELOAD_PORT = 35729; va
'use strict';
var LIVERELOAD_PORT = 35729;
var path = require('path');
module.exports = function (grunt) {
require('load-grunt-tasks')(grunt);
require('time-grunt')(grunt);
var yeomanConfig = {
app: 'app',
dist: 'dist'
};
try {
yeomanConfig.app = require('./bower.json').appPath || yeomanConfig.app;
} catch (e) {}
grunt.initConfig({
yeoman: yeomanConfig,
watch: {
gruntfile: {
files: ['Gruntfile.js']
},
compass: {
files: ['<%= yeoman.app %>/styles/{,*/}*.{scss,sass}'],
tasks: ['compass:server', 'autoprefixer']
},
livereload: {
options: {
livereload: LIVERELOAD_PORT
},
files: [
'<%= yeoman.app %>/{,*/}*.html',
'{.tmp,<%= yeoman.app %>}/styles/{,*/}*.css',
'{.tmp,<%= yeoman.app %>}/scripts/{,*/}*.js',
'<%= yeoman.app %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}'
]
}
},
express: {
options: {
port: 3000,
hostname: '*'
},
livereload: {
options: {
livereload: true,
serverreload: false,
server: path.resolve('app.js'),
bases: [path.resolve('./.tmp'), path.resolve(__dirname, yeomanConfig.app)],
files: [
'<%= yeoman.app %>/{,*/}*.html',
'.tmp/styles/{,*/}*.css',
// '<%= yeoman.app %>/images/{,*/}*.{gif,jpeg,jpg,png,svg,webp}'
]
}
},
test: {
options: {
server: path.resolve('app.js'),
bases: [path.resolve('./.tmp'), path.resolve(__dirname, 'test')]
}
},
dist: {
options: {
server: path.resolve('app.js'),
bases: path.resolve(__dirname, yeomanConfig.dist)
}
}
},
open: {
server: {
url: 'http://localhost:<%= express.options.port %>'
}
},
compass: {
options: {
sassDir: '<%= yeoman.app %>/styles',
cssDir: '.tmp/styles'
},
dist: {
options: {
}
},
server: {
options: {
debugInfo: true
}
}
},
autoprefixer: {
options: {
browsers: ['last 1 version']
},
dist: {
files: [{
expand: true,
cwd: '.tmp/styles/',
src: '{,*/}*.css',
dest: '.tmp/styles/'
}]
}
},
concurrent: {
server: [
'compass:server',
'copy:styles'
],
test: [
'copy:styles'
],
dist: [
'compass',
'copy:styles',
'imagemin',
'svgmin'
]
}
});
grunt.registerTask('server', function (target) {
if (target === 'dist') {
return grunt.task.run(['build', 'open', 'express:dist', 'express-keepalive']);
}
grunt.task.run([
'clean:server',
'concurrent:server',
'autoprefixer',
'express:livereload',
'open',
'watch'
]);
});
grunt.registerTask('test', [
'clean:server',
'autoprefixer',
'concurrent:test',
'express:test',
'karma'
]);
grunt.registerTask('build', [
'clean:dist',
'useminPrepare',
'concurrent:dist',
'autoprefixer',
'concat',
'cssmin',
'uglify',
'copy:dist',
'modernizr',
'rev',
'usemin',
'cdnify',
'ngmin'
]);
grunt.registerTask('default', [
'newer:jshint',
'compass',
'test',
'build'
]);
};
“严格使用”;
var LIVERELOAD_PORT=35729;
var path=require('path');
module.exports=函数(grunt){
要求('load-grunt-tasks')(grunt);
要求(“时间咕噜”)(咕噜);
var yeomanConfig={
应用程序:“应用程序”,
dist:“dist”
};
试一试{
yeomanConfig.app=require('./bower.json').appPath | | yeomanConfig.app;
}捕获(e){}
grunt.initConfig({
约曼:约曼图,
观察:{
Grunfile:{
文件:['grunfile.js']
},
指南针:{
文件:['/styles/{,*/}*{scss,sass}'],
任务:['compass:server','autoprefixer']
},
利弗雷罗德:{
选项:{
利弗雷洛德:利弗雷洛德港口
},
档案:[
'/{,*/}*.html',
“{.tmp,}/styles/{,*/}*.css”,
“{.tmp,}/scripts/{,*/}*.js”,
“/images/{,*/}*{png,jpg,jpeg,gif,webp,svg}”
]
}
},
快递:{
选项:{
港口:3000,
主机名:'*'
},
利弗雷罗德:{
选项:{
利弗雷罗德:没错,
serverreload:false,
服务器:path.resolve('app.js'),
bases:[path.resolve('./.tmp'),path.resolve(uu dirname,yeomanConfig.app)],其中,
档案:[
'/{,*/}*.html',
“.tmp/styles/{,*/}*.css”,
//“/images/{,*/}*{gif,jpeg,jpg,png,svg,webp}”
]
}
},
测试:{
选项:{
服务器:path.resolve('app.js'),
base:[path.resolve('./.tmp'),path.resolve(_dirname,'test')]
}
},
地区:{
选项:{
服务器:path.resolve('app.js'),
基本:path.resolve(uu dirname,yeomanConfig.dist)
}
}
},
开放式:{
服务器:{
网址:'http://localhost:'
}
},
指南针:{
选项:{
sassDir:“/styles”,
cssDir:“.tmp/styles”
},
地区:{
选项:{
}
},
服务器:{
选项:{
debugInfo:true
}
}
},
自动刷新器:{
选项:{
浏览器:[“上一版本”]
},
地区:{
档案:[{
是的,
cwd:“.tmp/styles/”,
src:'{,*/}*.css',,
目标:'.tmp/styles/'
}]
}
},
并发:{
服务器:[
“指南针:服务器”,
“复制:样式”
],
测试:[
“复制:样式”
],
地区:[
“指南针”,
“复制:样式”,
“imagemin”,
“斯维格明”
]
}
});
grunt.registerTask('server',函数(目标){
如果(目标=='dist'){
返回grunt.task.run(['build','open','express:dist','express keepalive']);
}
grunt.task.run([
“清理:服务器”,
'并发:服务器',
“自动刷新器”,
“快车:利弗雷罗德”,
"开放",,
“注意”
]);
});
grunt.registerTask('test'[
“清理:服务器”,
“自动刷新器”,
“并发:测试”,
“快车:测试”,
“因果报应”
]);
grunt.registerTask('build'[
“清洁区”,
“使用MinPrepare”,
'并发:dist',
“自动刷新器”,
"海螺",,
“cssmin”,
"丑",,
'副本:dist',
"现代化",,
“rev”,
“usemin”,
“cdnify”,
“ngmin”
]);
grunt.registerTask('default'[
'更新:jshint',
“指南针”,
"测试",,
“建造”
]);
};
如果您使用的是grunt contrib compass,我建议您使用本机compass watcher。它比用grunt重建要快得多。如果您启用它,您必须通过grunt并发运行它,更多信息