列出文件并使用Jade显示它们(读取:通过Grunt将异步数据传递给Jade)

时间:2014-12-16 01:05:42

标签: asynchronous gruntjs pug

我无法从异步模块(https://github.com/jergason/recursive-readdir传递数据,说实话,每个异步操作都有问题 - fs.readdir也是如此。

我希望Grunt有本机方法,如:grunt.file.readJSON()来递归读取目录......

一开始我用recursive-readdir创建了一个简单的模块并将其直接包含在Gruntfile.js中(没有效果),但在阅读Grunt doc之后,this.async就出现了。即使仍然无法将recursive-readdir的异步文件列表传递给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);
 });

INIT CONFIG

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已创建。

1 个答案:

答案 0 :(得分:0)

感谢this answer我找到了解决方案:

指定任务

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();
    });
});

INIT CONFIG

grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),
    initData: {}...

包含数据

jade: {
    dev: {
        options: {
            pretty: true,
            data: {
                asyncData: '<%= initData %>'
            }
        }...

希望这会对某人有所帮助。 Git repo已更新。