为什么我不会重新加载我更新的更少的文件?

时间:2014-01-04 07:05:51

标签: less gruntjs watch

每次我对其中一个文件进行更改时,我都会尝试让Grunt处理我较少的文件。

我有一个“监视”任务正在运行,并且它表示在我进行更改时正在处理文件,并且它会输出正确的文件,这些文件会发生变化,因此我的手表正在运行,但我所做的更改并未在css文件。

我的文件结构是这样的

-styles
   globals.less
   components.less
   -menu 
      menu.less
   -header
      header.less

components.less文件是一组较少的mixin来抓取其他.less文件,例如@import "menu/menu.less";

在我的grunt文件中,我有

less: {
      development: {
        options: {
          paths: ['./app/vendor/modern-touch-less','./app/styles']
        },
        files: {
          './app/styles/modern-touch.css':'./app/vendor/modern-touch-less/style.less',
          './app/styles/components.css':'./app/styles/components.less'
        }
      }
    },
 watch: {
      js: {
        files: ['/scripts/{,*/}*.js','/styles/{,*/}*.less'],
        tasks: ['newer:jshint:all, less'],
        options: {
          livereload: true
        }
      },
      styles: {
        files: ['./styles/{,*/}*.*','./vendor/{,*/}*.less'],
        tasks: ['less','newer:copy:styles', 'autoprefixer'],
        options: {
          nospawn: true,
          livereload: true
        }
      },
 }

首次启动应用时,较少的文件内置于正确的components.css文件中,但更改文件后,components.css文件未更新。

Grunt以

开头
 grunt.task.run([
      'clean:server',
      'bower-install',
      'concurrent:server',
      'less',
      'autoprefixer',
      'connect:livereload',
      'watch',
      'karma'
    ]);

1 个答案:

答案 0 :(得分:3)

也许您可以尝试简化配置,将任务拆分为在适当的文件集上运行。

  watch: {
      js: {
        files: ['/scripts/{,*/}*.js'],
        tasks: ['newer:jshint:all'],
        options: {
          livereload: true
        }
      },
      styles: {
        files: ['./styles/{,*/}*.*','./vendor/{,*/}*.less'],
        tasks: ['less','newer:copy:styles', 'autoprefixer'],
        options: {
          nospawn: true,
          livereload: true
        }
      },
 }

在原始观看配置中,watch.js.tasks array['newer:jshint:all, less'],看起来像拼写错误,应为['newer:jshint:all', 'less']。这也可以解决问题,但我会考虑只对他们受影响的文件运行任务。