[deployment] gulp로 디렉토리를 재귀 적으로 복사하는 방법은 무엇입니까?

작업 디렉토리에서 서버 (같은 기계)로 프로젝트를 준비하려고합니다. 다음 코드를 사용하십시오.

gulp.src([
    'index.php',
    'css/**',
    'js/**',
    'src/**',
])
.pipe(gulp.dest('/var/www/'));

모든 파일이 복사되는 것을 볼 수 있습니다. 그러나 그것은 dir 구조를 평평하게합니다-모든 디렉토리는 복사되지만 모든 파일은 루트에 배치됩니다/var/www

Gulp는 훌륭한 빌드 도구처럼 보이지만 항목을 복사하는 것은 간단한 과정이어야합니다?



답변

다음은 폴더 구조를 병합하지 않고 작동합니다.

gulp.src(['input/folder/**/*']).pipe(gulp.dest('output/folder'));

'**/*'중요한 부분입니다. 그 표현은 강력한 파일 선택 도구 인 glob 입니다. 예를 들어 .js 파일 만 복사하려면 다음을 사용하십시오.'input/folder/**/*.js'


답변

완전한 디렉토리 구조를 복사 gulp하려면 gulp.src()메소드 의 기반이 제공되어야합니다 .

따라서 gulp.src( [ files ], { "base" : "." })위의 구조에서 모든 디렉토리를 재귀 적으로 복사하는 데 사용할 수 있습니다.

나처럼, 이것을 잊어 버릴 수 있다면 다음을 시도하십시오.

gulp.copy=function(src,dest){
    return gulp.src(src, {base:"."})
        .pipe(gulp.dest(dest));
};


답변

따라서 모든 경로가 동일한 기본 경로를 갖는 경우 기본 작업을 제공하는 솔루션이 작동합니다. 그러나 다른 기본 경로를 제공하려는 경우 여전히 작동하지 않습니다.

이 문제를 해결하는 한 가지 방법은 경로의 시작을 상대적으로 만드는 것입니다. 귀하의 경우 :

gulp.src([
    'index.php',
    '*css/**/*',
    '*js/**/*',
    '*src/**/*',
])
.pipe(gulp.dest('/var/www/'));

이것이 효과가있는 이유는 Gulp가베이스를 첫 번째 명시 적 청크의 끝으로 설정하기 때문입니다.

폴더 구조에 두 번 일치 할 수있는 특정 경로가 없는지 확인할 수있는 경우에만 작동합니다. 예를 randomjs/들어와 레벨이 같으면 js둘 다 일치하게됩니다.

이것이 최상위 gulp.src 함수의 일부로 이것을 포함시키는 것으로 밝혀진 유일한 방법입니다. 그러나 각 glob을 분리하여 플러그인을위한 기본 디렉토리를 지정할 수있는 플러그인 / 함수를 작성하는 것은 간단 할 것입니다.


답변

폴더의 전체 내용을 다른 폴더에 재귀 적으로 복사하려면 gulp에서 다음 windows 명령을 실행할 수 있습니다.

xcopy /path/to/srcfolder /path/to/destfolder /s /e /y

마지막 /y옵션은 덮어 쓰기 확인 메시지를 표시하지 않는 것입니다.

Linux에서는 gulp에서 다음 명령을 실행할 수 있습니다.

cp -R /path/to/srcfolder /path/to/destfolder

당신이 사용할 수있는 꿀꺽 – 임원 또는 꿀꺽 – 실행 꿀꺽에서 시스템 명령을 실행하는 플러그인.

관련된 링크들:

  1. xcopy 사용법

  2. 꿀꺽 꿀꺽꿀꺽 꿀꺽


답변