Что делает опция «раскрыть» в grunt-contrib-copy? Все примеры используют его, но в документации ничего не говорится о том, что он делает.

100
  1. Вот README и примеры: https://github.com/gruntjs/grunt-contrib-copy/blob/master/README.md .
  2. Вот соответствующая часть кода (которую я, по-видимому, не могу понять) из https://github.com/gruntjs/grunt-contrib-copy/blob/master/tasks/copy.js :
module.exports = function (grunt) {
  'использовать строго';

  var path = require ('путь');

  grunt.registerMultiTask ('копировать', 'Копировать файлы.', function () {
    var kindOf = grunt.util.kindOf;

    var options = this.options ({
      processContent: false,
      processContentExclude: []
    });

    var copyOptions = {
      процесс: options.processContent,
      noProcess: options.processContentExclude
    };

    grunt.verbose.writeflags (параметры, 'Параметры');

    var dest;
    var isExpandedPair;
    var tally = {
      директории: 0,
      файлы: 0
    };

    this.files.forEach (function (filePair) {
      isExpandedPair = filePair.orig.expand || ложный;

      filePair.src.forEach (function (src) {
        if (detectDestType (filePair.dest) === 'каталог') {
          dest = (isExpandedPair)? filePair.dest: unixifyPath (path.join (filePair.dest, src));
        } else {
          dest = filePair.dest;
        }

        if (grunt.file.isDir (src)) {
          grunt.verbose.writeln ('Создание' + dest.cyan);
          grunt.file.mkdir (dest);
          tally.dirs ++;
        } else {
          grunt.verbose.writeln ('Копирование' + src.cyan + '->' + dest.cyan);
          grunt.file.copy (src, dest, copyOptions);
          tally.files ++;
        }
      });
    });
Патрик
источник
Вы в курсе, что принятый ответ неверен? См. Этот ответ ниже .
Дэвид Парссон

Ответы:

59

Expand позволяет указать, хотите ли вы создать целевой путь полностью (например:) /path/missing1/missing2или создать только последний каталог, когда существует его родительский каталог ( /path/existing/missing).

Владимир Георгиев
источник
4
Ах, так что это фактически опция -p для mkdir. Понял, спасибо!
Патрик
6
Это неверный ответ. В лучшем случае это упрощено.
Дэвид Парссон
3
-1. Это вводит в заблуждение - на основе этого ответа я удалил expand: true, полагая, что он мне не нужен, а затем моя сборка перестала работать.
Claudiu
82

Поскольку expandэто часть Grunt, а не специфическая для grunt-contrib-copy, информацию о нем можно найти в API конфигурации файлов Grunt :

Установите expandзначение, trueчтобы включить следующие параметры:

  • cwdВсе srcсовпадения относятся к этому пути (но не включают его).
  • srcШаблон (ы) для сопоставления относительно cwd.
  • dest Префикс пути назначения.
  • extЗамените любое существующее расширение этим значением в сгенерированных destпутях.
  • extDotИспользуется, чтобы указать, где находится точка, указывающая на продление. Может принимать либо 'first'(расширение начинается после первой точки в имени файла), либо 'last'(расширение начинается после последней точки), и по умолчанию установлено значение 'first'.
  • flattenУдалите все части пути из созданных destпутей.
  • rename Эта функция вызывается для каждого найденного src файла (после переименования и выравнивания расширения). destИ согласованы srcпути передаются в, и эта функция должна возвращать новое destзначение. Если один и тот же результат destвозвращается более одного раза, каждый srcиз использовавших его будет добавлен в массив источников для него.

Кроме того, кажется, что destвсегда будет считаться каталогом назначения, если установитьexpand значение true.

Дэвид Парссон
источник
Лучший ответ. Но разве это нигде не зафиксировано?
syonip 08
Я действительно нашел документацию после второго просмотра и соответствующим образом обновил свой ответ.
Дэвид Парссон 08
Я добавил полезный пример, представленный в документе. Теперь все более ясно.
Реми Бешерас,