Как получить Grunt-Contrib-Copy для копирования файлов/каталогов относительно заданного пути источника

Первое использование этой задачи и то, что я пытаюсь достичь, следующее:

скопировать все каталоги/файлы с 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

Я создал пример проекта с деревом следующим образом:

.
├── 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 делает то, что вам нужно. Может быть, вы оставили src при src/js/bower_components/* при установке cwd на src/js/bower_components? В этом случае src должен читать что-то вроде **/*.js, но в зависимости от того, что вам действительно нужно.