如何让Grunt-Contrib-Copy根据给定的源路径复制文件/目录

17

第一次使用此任务,我想要实现以下目标:

将所有目录/文件从src/js/bower_components/*复制到build/assets/js/vendor/

我尝试使用cwd属性,但当我使用它时它根本不起作用.. 我将其设置为:src/js/bower_components/

来自src

.
├── Gruntfile
└── src
    └── js
        └── bower_components
            └── jquery

我目前得到:

.
├── Gruntfile
└── build
    └── assets
        └── js
            └── vendor
                src
                └── js
                    └── bower_components
                        └── jquery

我想要的

.
├── Gruntfile
└── build
    └── assets
        └── js
            └── vendor
                └──jquery

这是我当前的Grunt任务:

copy: {
  main: {
    src: 'src/js/bower_components/*',
    dest: 'build/assets/js/vendor/',
    expand: true,
  }
},

谢谢任何帮助

1个回答

21

我已经建立了一个类似于这样的树形结构的示例项目:

.
├── Gruntfile.js
├── package.json
└── src
    └── js
        └── foo.js

使用以下的Gruntfile:

module.exports = function(grunt) {
  require('matchdep').filterDev('grunt-*').forEach(grunt.loadNpmTasks);

  grunt.initConfig({
    copy          : {
      foo : {
        files : [
          {
            expand : true,
            dest   : 'dist',
            cwd    : 'src',
            src    : [
              '**/*.js'
            ]
          }
        ]
      }
    }
  });

  grunt.registerTask('build', function(target) {
    grunt.task.run('copy');
  });

};

这给了我这个结构:

.
├── Gruntfile.js
├── dist
│   └── js
│       └── foo.js
├── package.json
└── src
    └── js
        └── foo.js

当我更改了cwd以便Gruntfile读取:

module.exports = function(grunt) {
  require('matchdep').filterDev('grunt-*').forEach(grunt.loadNpmTasks);

  grunt.initConfig({
    copy          : {
      foo : {
        files : [
          {
            expand : true,
            dest   : 'dist',
            cwd    : 'src/js',
            src    : [
              '**/*.js'
            ]
          }
        ]
      }
    }
  });

  grunt.registerTask('build', function(target) {
    grunt.task.run('copy');
  });

};

我有这个目录结构:

.
├── Gruntfile.js
├── dist
│   └── foo.js
├── package.json
└── src
    └── js
        └── foo.js

看起来像是cwd做了你需要的事情。也许在将cwd设置为src/js/bower_components时,src被留在了src/js/bower_components/*中?如果是这种情况,src应该读取类似于**/*.js的内容,但具体取决于你的实际需要。


1
值得注意的是,当使用 **/* 模式时,grunt-contrib-copy 一次只能复制一个文件,这非常缓慢。对于大文件层次结构,你最好选择其他插件。 - Doug
这个给我:正在运行“build”任务 警告:未找到“copy”任务。使用--force继续。 - Stepan Yakovenko
如果你希望它们都在同一个目标文件夹中,可以添加"flatten:true"。 - Santiago Rebella

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接