2016-08-26 2 views
-1

빌드 전을 실행하기 위해 작업 Runned Explorer를 통해 VS2015에 구성한 Gruntfile.js가 있습니다. 이 새로운 작업에서이 새로운 작업에서 새로운 작업을 추가해야합니다. 프로젝트의 2 개 파일 중 DateLastModified를 비교해야하며, 다른 경우 프로젝트의 특정 .tt 파일을 실행해야합니다. 이것을 어떻게 얻을 수 있습니까? 다른 프로젝트에서Gruntfile.js에서 .tt 파일을 실행하십시오.

는이 질문에 설명 된 솔루션 적용 : https://stackoverflow.com/a/3381556/5816699

을하지만 수십 또는 프로젝트의 .TT 수백 개의 파일을 가질 수 있기 때문에, 프로젝트를 컴파일 약간 공격적이 될 수 있습니다. 그리고 난 그냥 grunfile에서 특정 .tt 파일을 실행합니다. 미리 감사드립니다.

답변

0

나는이 문제를 해결하기 위해이 솔루션을 사용했다. transformFiles 작업을 사용하여 xml 파일을 변경 한 경우 .tt 파일을 자동으로 실행하는 시계를 만들었습니다. 빌드하기 전에에서 작업 XXX를 runnig의 경우

는 작업 러너 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; 
 
       } 
 
      } 
 
     } 
 
    }()); 
 
};

관련 문제