使用grunt-contrib-watch
推荐的版本仅在此处编译已更改的文件:https://github.com/gruntjs/grunt-contrib-watch#compiling-files-as-needed
var changedFiles = Object.create(null);
var onChange = grunt.util._.debounce(function() {
grunt.config('jshint.all.src', Object.keys(changedFiles));
changedFiles = Object.create(null);
}, 200);
grunt.event.on('watch', function(action, filepath) {
changedFiles[filepath] = action;
onChange();
});
这很好用(我再次在这里写了一个变体:https://gist.github.com/pgilad/6897875)
问题是在Jade模板中使用include
时,这意味着您要包含其他Jade模板以构建完整的html文件。
使用单一解决方案进行编译不起作用,因为如果使用.jade
嵌入正在处理的include current_working_jade.jade
文件,则包含文件将无法重新编译
除了 从头开始编译所有jade
文件之外, 是否有任何变通办法?当每次有大约60个大型玉文件要编译时,这会导致问题。
我能想到的唯一可能的解决方案是在外部或使用目录映射jade模板依赖项,但我不知道有哪些工具/插件可以做到这一点......
答案 0 :(得分:4)
在已经开始处理将产生一种玉石{1}的脚手架之后,我找到了这个伟大的项目,已经解决了这个问题:
用法如下:
sourcemap
您想从玉器中获取相关文件列表:
npm install jade-inheritance --save-dev
var JadeInheritance = require('jade-inheritance');
然后当你想要获取文件时:
var inheritance = new JadeInheritance(file, basedirname, {basedir:basedirname});
该项目还演示了如何将概念与depenedentFiles = inheritance.files;
一起应用,以便仅使用其依赖项编译已更改的grunt.watch
文件,这正是我所需要的:
答案 1 :(得分:1)
我想象检查所有玉文件,如果它们包含您更改的文件,那么也重新编译它。不应该太难。伪代码:
var allFiles = getAllJadeFileWithIncludesAndProjectPathMap();
//allFiles now contains something like this
{
'jade/index.jade': ['jade/menu.jade', 'jade/home.jade'],
'jade/about.jade': ['jade/menu.jade']
}
var rootFiles = [];
_.each(allFiles, function (includes, parent) {
_.each(includes, function (includePath) {
var parent;
while (parent = getParentPath(includePath)) {
//nothing needed if getParentPath returns null for files that aren't included
}
if (rootFiles.indexOf(parent) !== -1) {
rootFiles.push(parent);
}
});
});
现在将这些文件添加到编译任务中。