2013-09-19 1 views
7

У меня есть настройка для компиляции всех моих файлов кофе в javascript и поддержка всех структур папок с помощью dynamic_mappings, который отлично работает.Grunt watch: скомпилировать только один файл не все

coffee: { 
    dynamic_mappings: { 
    files: [{ 
     expand: true, 
     cwd: 'assets/scripts/src/', 
     src: '**/*.coffee', 
     dest: 'assets/scripts/dest/', 
     ext: '.js' 
    }] 
    } 
} 

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

watch: { 
    coffeescript: { 
    files: 'assets/scripts/src/**/*.coffee', 
    tasks: ['coffee:dynamic_mappings'] 
    } 
} 

Проблема заключается в том, что при изменении одного файла компилирует весь каталог кофе в Javascript снова, это было бы здорово, если бы только скомпилировать один файл кофе который был изменен на Javascript. Возможно ли это в Grunt или это обычная функция. Ключевым моментом здесь является то, что он должен поддерживать структуру папок, иначе было бы легко.

У нас есть пользовательские скрипты часов на работе, и я пытаюсь продать их на Grunt, но для этого вам понадобится эта функция.

+0

Would что-то нравится эта работа для вас: [Github ссылка: Компиляция файлов по мере необходимости] (HTTPS: //github.com/gruntjs/grunt-contrib-watch#compiling-files-as-needed)? Здесь есть еще одна интересная дискуссия: [Github link: Предоставить условную поддержку для включения файла.] (Https://github.com/gruntjs/grunt/issues/694) – dc5

+0

Дубликат: http://stackoverflow.com/questions/16203741/using-grunt-is-it-possible-to-compile-and-output-a-single-changed-file-to-a-diff - но никаких хороших ответов на этот вопрос – jcollum

+0

Я столкнулся с этой проблемой несколько месяцев назад, и решил, что это не стоит беспокоиться - для сбора всех моих файлов кофе (около 40 из них) требуется всего около 2 секунд. – jcollum

ответ

9

Вы можете использовать что-то вроде следующего файла Grunt. Всякий раз, когда файл CoffeeScript изменяется, он обновляет конфигурацию для coffee:dynamic_mappings, чтобы использовать только измененный файл в качестве src.

Этот пример представляет собой слегка модифицированную версию примера в grunt-contrib-watch readme.

Надеюсь, это поможет!

var path = require("path"); 
var srcDir = 'assets/scripts/src/'; 
var destDir = 'assets/scripts/dest/'; 

module.exports = function(grunt) { 
    grunt.initConfig({ 
     coffee: { 
      dynamic_mappings: { 
       files: [{ 
        expand: true, 
        cwd: srcDir, 
        src: '**/*.coffee', 
        dest: destDir, 
        ext: '.js' 
       }] 
      } 
     }, 
     watch : { 
      coffeescript : { 
       files: 'assets/scripts/src/**/*.coffee', 
       tasks: "coffee:dynamic_mappings", 
       options: { 
        spawn: false, //important so that the task runs in the same context 
       } 
      } 
     } 
    }); 

    grunt.event.on('watch', function(action, filepath, target) { 
     var coffeeConfig = grunt.config("coffee"); 
     // Update the files.src to be the path to the modified file (relative to srcDir). 
     coffeeConfig.dynamic_mappings.files[0].src = path.relative(srcDir, filepath); 
     grunt.config("coffee", coffeeConfig); 
    }); 

    grunt.loadNpmTasks("grunt-contrib-coffee"); 
    grunt.loadNpmTasks("grunt-contrib-watch"); 

    grunt.registerTask("default", [ "coffee:dynamic_mappings", "watch:coffeescript"]); 
}; 

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

  • Нет связанных вопросов^_^