2016-03-18 6 views
0

Я хочу хрюкать, чтобы скомпилировать sass каждый раз, когда grunt выполняется, если мои файлы Sass не изменились. Иногда наблюдателю не удается определить, отличается ли скомпилированный результат от существующего файла CSS, и единственный способ заставить его скомпилировать - это отредактировать один из файлов Sass.Как я могу заставить Grunt скомпилировать Sass, даже если никаких изменений не было сделано?

Grunt файл:

/** 
* @file 
*/ 
module.exports = function(grunt) { 

    // This is where we configure each task that we'd like to run. 
    grunt.initConfig({ 
    pkg: grunt.file.readJSON('package.json'), 
    watch: { 
     // This is where we set up all the tasks we'd like grunt to watch for changes. 
     scripts: { 
     files: ['js/source/{,*/}*.js'], 
     tasks: ['uglify'], 
     options: { 
      spawn: false, 
     }, 
     }, 
     images: { 
     files: ['images/source/{,*/}*.{png,jpg,gif}'], 
     tasks: ['imagemin'], 
     options: { 
      spawn: false, 
     } 
     }, 
     vector: { 
     files: ['images/source/{,*/}*.svg'], 
     tasks: ['svgmin'], 
     options: { 
      spawn: false, 
     } 
     }, 
     css: { 
     files: ['sass/{,*/}*.{scss,sass}'], 
     tasks: ['sass'] 
     } 
    }, 
    uglify: { 
     // This is for minifying all of our scripts. 
     options: { 
     sourceMap: true, 
     mangle: false 
     }, 
     my_target: { 
     files: [{ 
      expand: true, 
      cwd: 'js/source', 
      src: '{,*/}*.js', 
      dest: 'js/build' 
     }] 
     } 
    }, 
    imagemin: { 
     // This will optimize all of our images for the web. 
     dynamic: { 
     files: [{ 
      expand: true, 
      cwd: 'images/source/', 
      src: ['{,*/}*.{png,jpg,gif}' ], 
      dest: 'images/optimized/' 
     }] 
     } 
    }, 
    svgmin: { 
     options: { 
     plugins: [{ 
      removeViewBox: false 
     }, { 
      removeUselessStrokeAndFill: false 
     }] 
     }, 
     dist: { 
     files: [{ 
      expand: true, 
      cwd: 'images/source/', 
      src: ['{,*/}*.svg' ], 
      dest: 'images/optimized/' 
     }] 
     } 
    }, 
    sass: { 
     // This will compile all of our sass files 
     // Additional configuration options can be found at https://github.com/sindresorhus/grunt-sass 
     options: { 
     sourceMap: true, 
     // This controls the compiled css and can be changed to nested, compact or compressed. 
     outputStyle: 'expanded', 
     precision: 5 
     }, 
     dist: { 
     files: { 
      'css/base/base.css': 'sass/base/base.sass', 
      'css/components/components.css': 'sass/components/components.sass', 
      'css/components/tabs.css': 'sass/components/tabs.sass', 
      'css/components/messages.css': 'sass/components/messages.sass', 
      'css/layout/layout.css': 'sass/layout/layout.sass', 
      'css/theme/theme.css': 'sass/theme/theme.sass', 
      'css/theme/print.css': 'sass/theme/print.sass' 
     } 
     } 
    }, 
    browserSync: { 
     dev: { 
     bsFiles: { 
      src : [ 
      'css/**/*.css', 
      'templates/{,*/}*.twig', 
      'images/optimized/{,*/}*.{png,jpg,gif,svg}', 
      'js/build/{,*/}*.js', 
      '*.theme' 
      ] 
     }, 
     options: { 
      watchTask: true, 
      // Change this to "true" if you'd like the css to be injected rather than a browser refresh. In order for this to work with Drupal you will need to install https://drupal.org/project/link_css keep in mind though that this should not be run on a production site. 
      injectChanges: false 
     } 
     } 
    }, 
    }); 
    // This is where we tell Grunt we plan to use this plug-in. 
    grunt.loadNpmTasks('grunt-contrib-uglify'); 
    grunt.loadNpmTasks('grunt-contrib-imagemin'); 
    grunt.loadNpmTasks('grunt-svgmin'); 
    grunt.loadNpmTasks('grunt-sass'); 
    grunt.loadNpmTasks('grunt-contrib-watch'); 
    grunt.loadNpmTasks('grunt-browser-sync'); 
    // Now that we've loaded the package.json and the node_modules we set the base path 
    // for the actual execution of the tasks 
    // grunt.file.setBase('/') 
    // This is where we tell Grunt what to do when we type "grunt" into the terminal. 
    // Note: if you'd like to run and of the tasks individually you can do so by typing 'grunt mytaskname' alternatively 
    // you can type 'grunt watch' to automatically track your files for changes. 
    grunt.registerTask('default', ['browserSync','watch']); 
}; 
+0

Что означает «когда sass! = Css» подразумевается в этом контексте здесь ? И зачем вам нужен наблюдатель для компиляции изменений, если ни один из файлов не изменился? – cimmanon

+0

Чтобы понять, когда я запускаю grunt в текущем состоянии, он ничего не сделает, althoug sass заполнен кодом, а файл css - нет. Он будет вносить изменения, когда я обновляю sass-файл, но то, что я хочу, - это сказать, что текущее состояние sass-файлов отличается от файла css, так что сделайте свою магию, не редактируя sass-файл. – Insasse

ответ

0
grunt.registerTask('default', [ 
    'browserSync', 
    'sass', 
    'watch', 
]); 

Просто зарегистрируйтесь sass в качестве задачи для запуска при вводе grunt.

Если вы сделаете это, и файлы sass по-прежнему не дают вам желаемых результатов, вам необходимо вернуться к задаче sass и убедиться, что вы прокладываете файлы туда, куда хотите.

Более холодные варианты:

newer: При запуске grunt вы хотите дерзость компилировать в CSS только если есть разница между новой CSS и старой. В этом случае попробуйте grunt-newer. Добавляется newer:taskyouwanttorun:option.

watch:sass: Вы хотите, чтобы sass собирался во время watch на основе чего-то, кроме изменения одного из файлов sass. Легко, просто настройте задачу просмотра, которая ищет какой-либо файл, который вы хотите изменить, image/javascript/html/whatever и задайте задачу как sass

+0

Простая и простая истина в том, что ... вы правы. И, будучи тем, что я случайно ответил на вопросы _wrong_ 2, а не на правильном, гораздо более простом вопросе, который действительно задан, он дважды попадает в метку. – suzumakes

+0

Спасибо за ваш ответ: D Sry english не мой родной язык не хотел путать кого-то. – Insasse

Смежные вопросы