2015-07-09 3 views
1

Я столкнулся следующую интересную задачу:Сохранение состояния в задаче Grunt

  • Я хотел бы создать задачу Grunt, которая выполняется на различных этапах процесса сборки/выпуска.
  • Возможно, что один вызов делает некоторые изменения в файлах на основе шаблона, например. заменяя номер версии или тег Git, например, #develop в некоторых файлах.
  • Более поздний вызов в том же сборке должен «вернуть» вышеуказанные изменения обратно к их первоначальным значениям.

Основываясь на вышеизложенном, мне нужно будет найти способ отслеживания измененных файлов с первого вызова, поэтому я могу вернуть изменения на втором шаге. Я не могу использовать шаблон для второго шага, чтобы избежать ложных срабатываний.

Пример:

  1. Начать выпуск - много шагов, как часть этого, обобщать, уродовать/Минимизировать, врезаться номер версии, создать релиз ветки мерзавец.
  2. Замените номера версий некоторых зависимостей, например. в bower.json - изменить их от #develop до #1.2.3
  3. некоторых более шагов, в том числе Git совершает
  4. Заменить номер версии измененный выше от #1.2.3 назад #develop
  5. Дополнительных шагов по очистке релиза

последний шаг затруднен, так как я не хочу изменять какие-либо вхождения #1.2.3, которые я не обновлял на предыдущем шаге. Для этого мне нужно будет хранить список измененных файлов где-нибудь, либо в памяти, либо во временном файле в корне проекта, например. что-то вроде .grunt-replace. После прочтения файла на последнем шаге его можно удалить плагином.

Кто-нибудь использует плагин Grunt, как это? Как бы вы решили это? Имеет ли Grunt функциональность, которая будет поддерживать что-то вроде выше, или я должен просто использовать API-интерфейс Node.js?

Есть ли другие шаблоны, которые я должен рассмотреть, чтобы сохранить какое-то состояние между вызовами Grunt?

ответ

1

Вы можете использовать наблюдателя файлов, чтобы поддерживать процесс grunt, а затем отслеживать состояние, используя события.

Например:

var files = []; 


module.exports = function(grunt) { 

    grunt.initConfig({ 
    watch: { 
     files: ['orig.js'], 
     tasks: ['my-task'] 
    } 
    }); 

    grunt.loadNpmTasks('grunt-contrib-watch'); 


    grunt.registerTask('my-task', function(){ 
    // Execute some task 
    }); 

    grunt.event.on('watch', function(action, filepath, project) { 
    //add file 
    files.push(filepath); 

    }); 

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

}; 

Вы можете отслеживать, какие были изменены файлы и действовать соответствующим образом.

Я должен добавить, что это немного взломать. Ваш поток сборки не должен быть сдержанным, вы должны иметь возможность строить с нуля.

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