使用Grunt迭代模板

nik*_*ong 14 javascript gruntjs

我正在构建一个grunt文件,我有2个文件夹需要应用相同的grunt任务.我希望能够使用grunt template属性迭代每个文件夹,这样我就不必通过重复配置对象来膨胀我的grunt配置对象.像这样:

app1: {
  name: 'app1',
  src: ['src/app/<%= app1.name %>'],
  jsTpl: ['<%= distdir %>/<%= app1.name %>/templates/**/*.js'],
  js: '<%= app1.src %>/**/*.js'
},
app2 {
  name: 'app2',
  src: ['src/app/<%= app2.name %>'],
  jsTpl: ['<%= distdir %>/<%= app2.name %>/templates/**/*.js'],
  js: '<%= app2.src %>/**/*.js'
},
concat: {
  app1: {
    src: ['<%= app1.src %>'],
    dest: ['dist']
  },
  app2: {
    src: ['<%= app2.src %>'],
    dest: ['dist/<%= app2.name %>']
  }
 }
Run Code Online (Sandbox Code Playgroud)

这将是理想的,非常干燥,不必重复app1app2-rather,这将是真棒,让他们通过一些配置组合在一起.但我似乎无法弄明白该怎么做.谢谢你的帮助!

谢谢!

Ula*_*yev 7

Grunt只是一个普通的JS,因此您可以创建一个函数来生成配置对象.

function appConfig(appName){
    return {
        name: appName,
        src: ['src/app/' + appName],
        jsTpl: ['<%= distdir %>/' + appName + '/templates/**/*.js'],
        js: 'src/app/**/*.js'
    };
}
Run Code Online (Sandbox Code Playgroud)

然后在设置配置时简单地调用此函数

app1: appConfig('app1'),
app2: appConfig('app2'),
concat: {
    app1: {
        src: ['<%= app1.src %>'],
        dest: ['dist']
    },
    app2: {
        src: ['<%= app2.src %>'],
        dest: ['dist/<%= app2.name %>']
    }
}
Run Code Online (Sandbox Code Playgroud)