在运行express服务器时,如何通过grunt watch执行compass?

在运行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

当我运行“grunt服务器”时,一切都会执行,包括编译我的Sass。在保留express和livereload server的功能的同时,我应该如何继续观察Sass的变化并执行compass

当我更改文件时,包括livereload在内的一切都能正常工作,唯一不能正常工作的是在我更改Sass文件时执行compass重新编译。它甚至检测到更改,但不运行它

我附加了Grunfile的相关部分,只是为了尽可能短

'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并发运行它,更多信息