我很难从异步模块传递数据(https://github.com/jergason/recursive-readdir,老实说,每个异步操作都是一个问题 - fs.readdir也是)。
我希望 Grunt 有原生方法,例如:grunt.file.readJSON() 到递归读取目录...
一开始,我用递归-readdir做了一个简单的模块,并将其直接包含在Gruntfile中.js(没有效果),但是在阅读了Grunt文档之后,this.async出现了。即使仍然无法将异步文件列表从递归读取目录传递到 Jade 模板:
指定任务
var recursive = require('recursive-readdir');
grunt.registerTask('readFileList', 'Lists recursively files list. from given path', function() {
var done = this.async();
var fileList = recursive('somePath', function (err, files) {
console.log('log files: ', files);
});
done(fileList);
grunt.config.set('readyList', fileList);
});
初始化配置
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
config: {
list: grunt.config.get('readyList')
}...
包括数据
jade: {
dev: {
options: {
pretty: true,
data: {
asyncData: grunt.config.list
//asyncData: fs.readdirSync('.tmp')
}
}...
我的问题的"工作"存储库:https://github.com/cachaito/grunt_list_files 已创建。
多亏了这个答案,我找到了解决方案:
指定任务
grunt.registerTask('readFileList', 'Lists recursively files list. from given path', function() {
var done = this.async();
var fileList = recursive('./.tmp', function (err, files) {
grunt.config(['initData'], files);
console.log('RECIEVED FILES: ', files);
done();
});
});
初始化配置
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
initData: {}...
包括数据
jade: {
dev: {
options: {
pretty: true,
data: {
asyncData: '<%= initData %>'
}
}...
希望这会帮助某人。Git 存储库已更新。