我有一个Gruntfile.js,我在VS2015中通过Task Runned Explorer配置它来运行Before Build。 我需要在这个Gruntfile中添加一个新任务,在这个新任务中,我应该比较项目中2个文件的DateLastModified,如果不同,我应该在项目中运行特定的.tt文件。我怎样才能获得这个?
在其他项目中,我应用了此问题中描述的解决方案: https://stackoverflow.com/a/3381556/5816699
但是因为我可以在项目中拥有几十个或几百个.tt文件,所以可能会对项目进行一些积极的编译。我只是从grunfile运行特定的.tt文件。提前谢谢。
答案 0 :(得分:0)
我提出了这个解决方案以解决我的问题。 我创建了一个手表,以便在更改xml文件时使用任务transformFiles自动运行.tt文件。
如果在构建之前运行任务XXX,请使用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;
}
}
}
}());
};