2016-08-26 3 views
-1

私は、ビルド前に実行するタスクRunned ExplorerからVS2015で設定したGruntfile.jsを持っています。 この新しいタスクでこのGruntfileに新しいタスクを追加する必要があります。プロジェクトの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; 
 
       } 
 
      } 
 
     } 
 
    }()); 
 
};

関連する問題