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 ( 'path');

  grunt.registerMultiTask ( 'copy', 'Copy files.', function () {
    var kindOf = grunt.util.kindOf;

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

    var copyOptions = {
      프로세스 : options.processContent,
      noProcess : options.processContentExclude
    };

    grunt.verbose.writeflags (options, 'Options');

    var dest;
    var isExpandedPair;
    var tally = {
      dirs : 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 ( 'Creating'+ dest.cyan);
          grunt.file.mkdir (dest);
          tally.dirs ++;
        } else {
          grunt.verbose.writeln ( 'Copying'+ src.cyan + '->'+ dest.cyan);
          grunt.file.copy (src, dest, copyOptions);
          tally.files ++;
        }
      });
    });

수락 된 답변이 잘못되었음을 알고 있습니까? 아래 답변을 참조하십시오 .
David Pärsson 19 년

답변:


59

확장을 사용하면 대상 경로를 전체 (예 :)로 만들 것인지 아니면 /path/missing1/missing2부모가 존재할 때 마지막 디렉토리 만 만들 것인지 () 지정할 수 있습니다 /path/existing/missing.


4
아, mkdir에 대한 -p 옵션입니다. 알겠습니다, 감사합니다!
Patrick

6
이 대답은 정확하지 않습니다. 기껏해야 단순화됩니다.
David Pärsson 2015 년

3
-1. 이것은 오해의 소지가 있습니다.이 답변을 기반으로 제거 expand: true하고 필요하지 않다고 판단 한 다음 빌드가 작동을 멈췄습니다.
Claudiu

82

때문에 expand불평 소리의 일부가 꿀꿀-있는 contrib 복사에 대한 구체적인 아니라,에 대한 정보는에서 찾을 수 있습니다 그런트의 파일 구성 API :

설정 expand하기 위해 true다음과 같은 옵션을 사용하려면 :

  • cwd모든 src일치 항목은이 경로를 기준으로합니다 (포함하지 않음).
  • src를 기준으로 일치시킬 패턴 cwd입니다.
  • dest 대상 경로 접두사.
  • ext생성 된 dest경로 에서 기존 확장을이 값으로 바꿉니다 .
  • extDot확장을 나타내는 기간이있는 위치를 나타내는 데 사용됩니다. 'first'(확장은 파일 이름의 첫 번째 마침표 이후에 시작됨) 또는 'last'(확장자는 마지막 마침표 이후에 시작됨 ) 중 하나를 사용할 수 있으며 기본적으로 'first'.
  • flatten생성 된 dest경로 에서 모든 경로 부분을 제거합니다 .
  • rename이 함수는 일치하는 각 src파일 에 대해 호출됩니다 (확장자 이름 변경 및 병합 후). dest와 일치하는 src경로가 전달되며,이 기능은 새로운 반환해야합니다 dest값입니다. 동일한 항목 dest이 두 번 이상 반환되면 해당 항목 src을 사용한 각 항목 이 소스 배열에 추가됩니다.

또한 그것은 것 같아 dest항상 설정하는 경우 대상 디렉토리로 간주됩니다 expandtrue.


더 나은 대답. 그러나 이것은 어디에도 문서화되어 있지 않습니까?
syonip

실제로 두 번째를 살펴본 후 문서를 찾았으며 그에 따라 답변을 업데이트했습니다.
David Pärsson 2015 년

문서에 제공된 유용한 예제를 추가했습니다. 이제 더 명확 해졌습니다.
Rémi Becheras
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.