循环一个笨蛋的任务?

时间:2016-04-07 13:56:35

标签: javascript gruntjs

我需要遍历我的复制任务并每次在不同的文件夹中输出。我怎样才能遍历它并每次都为它提供一个var?我有多种语言可供输出,每个语言都需要放在自己的文件夹中。

copy:{
        files:{
            expand: true,
            cwd: '../',
            src: [
                'static/**',
            ],
            dest: '../../public/[language-folder-var]'
        }
    }

3 个答案:

答案 0 :(得分:1)

在配置对象中,您可以使用模板标记将数据注入字符串:

copy:{
        files:{
            expand: true,
            cwd: '../',
            src: [
                'static/**',
            ],
            dest: "../../public/<%= grunt.option('lang') %>/"
        }
    }

然后你需要一个能够迭代不同语言的函数,设置grunt.option变量,并为每个语言运行任务:

function compileLangFiles() {
    var langs = ['en', 'fr', 'jp'], lang;

    for (lang in langs) {
        grunt.option('lang', lang);
        grunt.task.run('copy');
    }
}

grunt.registerTask('copyLang', copyLangFiles);

答案 1 :(得分:0)

如果您的复制任务包含大量特定于文件类型的处理,您可以采取的一种方法是为不同的文件类型分别执行任务。
例如
grunt.registerTask( 'build', ['copyjs','copycss'] );

如果你有很多文件类型,这是不可取的。在这种情况下,您应该动态创建目标(任务)。我将路径放在一个数组中,并将forEach循环放在它上面,在循环中创建任务对象。

答案 2 :(得分:0)

Panthro,我想像这样的东西。

假设config.json像:

{ langs: ['en', 'fr', 'de'] }

加载(自动解析)

grunt.langconfig = grunt.file.readJSON('config.json');
grunt.langs = grunt.langconfig.langs;

并在iterate task加入langs

argName: grunt.langs.join(',')