[javascript] Grunt.js 복사를 사용하여 디렉토리의 모든 파일을 다른 디렉토리로 복사하십시오.

빌드 프로세스의 일부로 디렉터리의 모든 파일을 다른 디렉터리로 복사하려고합니다. 내가 명시 적으로 지정한 개별 파일에 대해 잘 작동하지만 전체 디렉토리를 복사하려고 할 때 전체 디렉토리 구조를 복사하거나 전혀 복사하지 않는 것과 같은 이상한 작업을 수행합니다. 내 GruntFile.js의 관련 부분은 다음과 같습니다.

copy: {
  myvoice: {
    files: [
      { src:"src/html/index.html", dest:"dist/myvoice/index.html" },
      { src:"src/html/css/style.css", dest:"dist/myvoice/css/style.css" },
      { src:"src/html/js/require.js", dest:"dist/myvoice/js/require.js" },
      { src:"build/myvoice/main.js", dest:"dist/myvoice/js/main.js" },
      { src:"src/html/css/fonts/*", dest:"dist/myvoice/css/fonts/" }
    ]
  }
},

특히 내가 작업 할 수없는 마지막 줄입니다.

      { src:"src/html/css/fonts/*", dest:"dist/myvoice/css/fonts/" }



답변

이 답변flatten: true옵션은 경우에 따라 작동 할 수 있지만 더 일반적인 요구 사항은 폴더와 하위 폴더 구조를 그대로 복사하는 것 입니다. 대부분의 경우 하위 폴더가 있으면 코드에서 그런 방식으로 참조되는 것 같습니다. 이 작업의 핵심 은 지정된 작업 디렉토리에 상대적인 폴더 구조를 유지 하는 옵션입니다.destcwd

copy: {
  files: {
    cwd: 'path/to/files',  // set working folder / root to copy
    src: '**/*',           // copy all files and subfolders
    dest: 'dist/files',    // destination folder
    expand: true           // required when using cwd
  }
}


답변

이 작업은 파일 glob을 지정하는 경우 폴더 구조를 유지합니다. 원하는 것은 flatten구조를 제거하는 옵션입니다.

{
    expand: true,
    flatten: true,
    src: ['src/html/css/fonts/**'],
    dest: 'dist/myvoice/css/fonts/',
    filter: 'isFile'
}

Github repo 에서 사용 가능한 나머지 옵션을 찾으십시오 . 도움이 되었기를 바랍니다.


답변

나는의 형식 변화하는 것을 추가하고 싶습니다 글로브을SRC하는 복사의 작동 방식을 수정합니다.

가리키는 OUT으로 bmoeskau 위, 다음이 복사됩니다 모든 것을 내부 dist/와로 이동 path/to/dir(이미 존재하는 경우 대상을 덮어 쓰기).

copy: {
  files: {
    expand: true,
    dest: 'path/to/dir',
    cwd: 'dist/',
    src: '**'
  }
}

그러나 다음 사항에 유의하십시오.

copy: {
  files: {
    expand: true,
    dest: 'path/to/dir',
    cwd: 'dist/',
    src: '*'
  }
}

dist/디렉토리뿐만 아니라 내부의 파일 만 복사 하지만 해당 디렉토리의 내용을 대상으로 복사 하지는 않습니다 .

또한 다음 src: '*/*'은 .NET 내부의 내용이있는 디렉토리 복사 dist/합니다. 즉, 내부 파일은 dist/복사되지 않습니다.

copy: {
  files: {
    expand: true,
    dest: 'path/to/dir',
    cwd: 'dist/',
    src: '*/*'
  }
}

마지막으로, 위와 동일하지만 src: '**/**'복사됩니다 만하는 것은 내부의 파일 dist/뿐만 아니라 내부의 파일 dist/을 하위 디렉토리 path/to/dir. 따라서 대상 내부에는 폴더가 없습니다.

copy: {
  files: {
    expand: true,
    dest: 'path/to/dir',
    cwd: 'dist/',
    src: '*/*',
    flatten: true,
    filter: 'isFile'
  }
}


답변

(Coffeescript에서) 파일 세그먼트에 중괄호 대신 egdy를 사용해야했습니다 …

copy: {
  files: [
    cwd: 'path/to/files'
    src: '**/*'
    dest: 'dist/files'
    expand: true
  ]
}


답변

앵귤러 여만으로 개발하고 있다면, 이것이 grunt로 복사하는 더 좋은 방법입니다. expand : cwd를 사용할 때 true가 필요합니다. <% = yeoman.app %>는 앱 경로 ( ‘.’)입니다.

 {
    expand: true,
     cwd: '<%= yeoman.app %>/data',
     dest: '<%= yeoman.dist %>/data',
     src: ['**']
    }


답변