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



我很难从异步模块传递数据(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 存储库已更新。

最新更新