2016-08-26 3 views
-1

У меня есть Gruntfile.js, который я настроил в VS2015 через Task Runned Explorer для запуска Before Build. Мне нужно добавить новую задачу в этот Gruntfile, в этой новой задаче я должен сравнить DateLastModified из 2-х файлов в проекте, и в случае разных я должен запустить определенные .tt-файлы в проекте. Как я могу это приобрести?Выполнять файлы .tt в Gruntfile.js

В других проектах я применил решение, описанное в этом вопросе: https://stackoverflow.com/a/3381556/5816699

Но так как я мог бы иметь несколько десятков или сотен .TT файлов в проекте, может быть немного агрессивным компиляции проекта. И я просто запускаю определенные файлы .tt из файла grunfile. Заранее спасибо.

ответ

0

Я пришел с этим решением для решения моей проблемы. Я создал часы для автоматического запуска файлов .tt в случае смены файла xml с помощью задачи transformFiles.

В случае хой запущенных задач в Перед сборкой, прикрепить задачу с помощью Task Runner Explorer, были, как вы можете сделать это: https://visualstudiogallery.msdn.microsoft.com/8e1b4368-4afb-467a-bc13-9650572db708

module.exports = function (grunt) { 
 
    grunt.initConfig({ 
 
     pkg: grunt.file.readJSON('package.json'), 
 
     watch: { 
 
      all: { 
 
       files: ['**/*Config.xml', '**/*Other.xml'], 
 
       tasks: ['XXX'], 
 
      }, 
 
     }, 
 
    }); 
 
    var spawn = require('child_process').spawn; 
 
    var exec = require('child_process').exec; 
 
    var textTransformPossiblePaths = ['C:\\Program Files (x86)\\Common Files\\Microsoft Shared\\TextTemplating\\14.0\\TextTransform.exe', 
 
            'C:\\Program Files (x86)\\Common Files\\Microsoft Shared\\TextTemplating\\12.0\\TextTransform.exe', 
 
            'D:\\Program Files (x86)\\Common Files\\Microsoft Shared\\TextTemplating\\14.0\\TextTransform.exe', 
 
            'D:\\Program Files (x86)\\Common Files\\Microsoft Shared\\TextTemplating\\12.0\\TextTransform.exe']; 
 
    var patterns = { 
 
     allT4: ['**/*.tt', '!**/bin/**', '!**/node_modules/**'], 
 
     watchXml: ['**/*Config.xml', '**/*Other.xml'] 
 
    }; 
 

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

 
    grunt.registerTask('XXX', [], function() { 
 
     var fs = require('fs'); 
 
     const path = require('path'); 
 
     var filesXML = []; 
 

 
     for (i = 0; i < patterns.watchXml.length ; i++) { 
 
      var files = grunt.file.expand(patterns.watchXml[i]); 
 
      files.forEach(function (element) { 
 
       filesXML.push(element); 
 
      }); 
 
     };   
 
     for (i = 0; i < filesXML.length ; i++) { 
 
      var filesCS = grunt.file.expand(path.dirname(filesXML[i]) + "/" + "*.cs"); 
 
      var filesTT = grunt.file.expand(path.dirname(filesXML[i]) + "/" + "*.tt"); 
 
      for (j = 0; j < filesCS.length ; j++) { 
 
       if (fs.lstatSync(filesXML[i]).mtime > fs.lstatSync(filesCS[j]).mtime) { 
 
        for (k = 0 ; k < filesTT.length; k++) { 
 
         var t4Path = textTransformPossiblePaths.filter(function (f) { return fs.existsSync(f); })[0]; 
 
         exec('"' + t4Path + '" ' + [filesTT[k]] + '"'); 
 
        } 
 
        break; 
 
       } 
 
      } 
 
     } 
 
    }()); 
 
};

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