来自动态对象的引用文件

时间:2014-01-30 19:05:38

标签: javascript gruntjs grunt-contrib-copy

我正在处理Gruntfile,并且很难让复制任务以我想要的方式工作。

我使用Uglify定义dynamic file object任务,如:

uglify: {
  files: {
    expand: true,
    cwd: 'src',
    src: [
      'some/path/file1.js',
      'another/path/file2.js'
    ],
    dest: 'dst',
    ext: '.min.js'
  }
}

此任务非常有效,我将我的文件写成'dst / some / path / file1.min.js'和'dst / another / path / file2.min.js'。

我正在处理copy任务,我想复制我刚刚在其他地方构建的文件。我想用模板引用文件集,而不是重新定义规则。

如果我使用

copy: {
  deploy: {
    src: '<%= uglify.files %>',
    dest: 'deploy/'
  }
}

然后我得到了

  

警告:对象#没有方法'indexOf'

错误。

由于超出此问题范围的各种原因,通配技巧不适用于部署。

因此,在复制任务中,如何引用另一个任务刚刚创建的文件集?

2 个答案:

答案 0 :(得分:1)

您有files: {}作为对象。它应该是一个数组files: []

uglify: {
  files: [{
    expand: true,
    cwd: 'src',
    src: [
      'some/path/file1.js',
      'another/path/file2.js'
    ],
    dest: 'dst',
    ext: '.min.js'
  }]
}

答案 1 :(得分:0)

复制配置中的src应该是字符串或数组,但是你在它上面设置一个对象,当grunt尝试在复制任务的src上应用indexof方法时,错误将是结果。你可以通过将uglify.files设置为对象数组来避免这种情况,例如:

uglify: {
    files: [{
        expand: true,
        cwd: 'src',
        src: [
            'some/path/file1.js',
            'another/path/file2.js'
        ],
        dest: 'dst',
        ext: '.min.js'
   }]
}

然后,它将通过错误,但你的目标不会满足。你需要选择uglify的dest作为src进行复制。解决方案是grunt方法,TEMP FILES,你应该在temp路径中设置uglify dest,然后从那里选择你需要的副本任务的src。像这样的东西:

copy:{
    deploy:{
        files: [{
            expand: true,
            cwd: 'dst'
            src: '**/*.min.js'
            dest: 'deploy'
        }]
    }    
}