gulp에서 파일을 복사하고 상위 디렉토리를 기반으로 이름을 바꾸는 방법을 찾고 있습니다.


91

각 모듈에 대해 빌드 디렉토리에 복사해야하는 파일이 몇 개 있으며 이로부터 반복되는 코드를 최소화하는 방법을 찾고 있습니다.

gulp.src('./client/src/modules/signup/index.js')
  .pipe(gulp.dest('./build/public/js/signup'));

gulp.src('./client/src/modules/admin/index.js')
  .pipe(gulp.dest('./build/public/js/admin'));

다음과 같이 :

gulp.src('./client/src/modules/(.*)/index.js')
  .pipe(gulp.dest('./build/public/js/$1'));

분명히 위의 방법은 작동하지 않으므로이를 수행하는 방법이 있습니까? 아니면 이미 수행하는 npm이 있습니까?

감사

답변:


131

가장 좋은 방법은 base다음과 같이 파일을 소싱 할 때 구성하는 것입니다 .

gulp.src('./client/src/modules/**/index.js', {base: './client/src/modules'})
  .pipe(gulp.dest('./build/public/js/'));

이것은 gulp모듈 디렉토리를 상대 경로를 결정하기위한 시작점으로 사용하도록 지시 합니다.

(또한 /**/*.js모든 JS 파일을 포함하려는 경우 사용할 수 있습니다 ...)


6
좀 더 동적 인 방법이 있어야합니다. src 파일이 2 개의 다른 디렉토리에서 왔고 그 디렉토리를 dest에 보존하고 싶을 때 어떨까요?
Ivan Durst

1
@IvanDurst 나는 OP (답변) 코드로이 특정한 경우를 관리했습니다. 기본 구성 사용하고 gulp 파일에서 독립 파일과 ./folder-example/**전체 폴더 및 파일로 의 상대 경로를 사용 합니다.
Caio Wilson

210

답은 아니지만 검색 결과에이 질문이 나타나는 경우에 적용됩니다.

gulp에서 파일 / 폴더를 복사하려면

gulp.task('copy', () => gulp
  .src('index.js')
  .pipe(gulp.dest('dist'))
);

2
흠 ... 내 꿀꿀이이 작업이 완료되었다고 말하지만 출력 파일이 존재하지 않습니다.
Tyguy7 2015 년

4
작업이 완료되면 Gulp에 알리려면 스트림을 반환해야합니다.
Merott 2015-06-10

2
나는 왜 "답변이 아니다"라고 말하는 대답이 질문에 대답하는 수용된 대답보다 더 많은 찬성표를 가지고 있는지 혼란 스럽습니다. 나는 우리가 질문에 대한 답변을 제공하는 것과는 반대로 검색 엔진이 특정한 일을하도록 고안된 답변으로 어수선 해져야한다고 확신하지 않습니다. 나는 그들이 사이트를 크롤링 할 때 얻는 것을 유용한 것을 만드는 것이 검색 엔진의 일이라고 생각합니다. 그냥 내 $ 0.02
jinglesthula

9
@jinglesthula 검색 엔진이 얼마나 잘 작동하는지에 관계없이 검색 엔진을 통해이 질문에 도달하는 사람들에게 유용한 서비스입니다. 감사합니다.
jbkly

1
하하 그냥이 올바른 질문이나 정답보다 더 인기가 실현 : P
커크 Strobeck

5
return gulp.src('./client/src/modules/(.*)/index.js')  
  .pipe(gulp.dest('./build/public/js/$1'));

나를 위해 일했다!


.. 심지어 아직도이 있습니다 대답은.
Kirk Strobeck 2014 년

2
... 그러면 누군가 가 그대로 작동 하도록 다시 작성할 수 있으므로이 페이지를 방문하여 정확한 코드 스 니펫을 찾는 사람들이 실제로 사용할 수 있습니까?
Ivan Durst

그래서 ... 괄호와 $ n "역 참조"가 src / dest glob에서 허용됩니까? 그들은 정규식이 아닙니다, afaik. 이것은 내가 찾고있는 것처럼 보이지만 vinyl-fs 문서는 .src () 및 .dest () 옵션과 허용되는 옵션 및 작동 방식에 대해 다소 간결합니다.
jinglesthula

3

입력 디렉토리 트리 보존에 사용은 보존됩니다.

.pipe(gulp.dest(function(file) {
    var src = path.resolve(SRC_FOLDER);
    var final_dist = file.base.replace(src, '');
    return DIST_FOLDER + final_dist;
}))

이것을 사용하여 src :를 넣을 수 있습니다 .src(SRC_FOLDER + '/**/*.js').

일부 플러그인은 디렉토리 트리를 평평하게 만들기 때문에 다른 응답은 나를 위해 작동하지 않았습니다 (예 : base:on src()} 사용) .


0

병렬로 파일 복사

gulp.task('copy', gulp.parallel(
() =>  gulp.src('*.json').pipe(gulp.dest('build/')),
() =>  gulp.src('*.ico').pipe(gulp.dest('build/')),
() =>  gulp.src('img/**/*').pipe(gulp.dest('build/img/')),
)
);
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.