gulp를 사용하여 디렉토리와 파일을 선택하고 이동하십시오.


98

현재 gulp를 사용하여 내 dist/디렉토리 를 정리 하고 적절한 파일을 깨끗한 디렉토리로 이동 하는 bash 스크립트를 호출하고 있습니다. 스크립트가 * nix가 아닌 파일 시스템에서 작동하는지 확실하지 않기 때문에 gulp로이 작업을 수행하고 싶습니다.
지금까지 gulp-clean 모듈을 사용하여 dist/디렉터리 를 정리하고 있지만 필요한 디렉터리와 해당 파일을 dist 폴더로 이동하려고하면 디렉터리가 비어 있습니다.

var gulp = require('gulp'),
    clean = require('gulp-clean');

gulp.task('clean', function(){
  return gulp.src(['dist/*'], {read:false})
  .pipe(clean());
});

gulp.task('move',['clean'], function(){
  gulp.src(['_locales', 'icons', 'src/page_action', 'manifest.json'])
  .pipe(gulp.dest('dist'));
});

gulp.task('dist', ['move']);

호출 gulp dist하면 dist/디렉토리가 올바른 디렉토리로 채워지지만 모두 비어 있습니다.

$ ls dist/*
dist/manifest.json

dist/_locales:

dist/icons:

dist/page_action:

디렉토리와 그 내용을 dist/폴더에 어떻게 복사합니까?

답변:


162

src에 base옵션 을 포함해야합니다 . 그러면 원하는 방식으로 파일 구조가 유지됩니다.

var filesToMove = [
        './_locales/**/*.*',
        './icons/**/*.*',
        './src/page_action/**/*.*',
        './manifest.json'
    ];

gulp.task('move',['clean'], function(){
  // the base option sets the relative root for the set of files,
  // preserving the folder structure
  gulp.src(filesToMove, { base: './' })
  .pipe(gulp.dest('dist'));
});

또한 프로젝트 루트에 이러한 모든 소스 파일이 있으면 길을 잃을 수도 있습니다.

가능하다면 단일 src/폴더 를 사용하고 모든 애플리케이션 별 파일을 여기로 이동 하는 것이 좋습니다 . 이렇게하면 유지 관리를보다 쉽게 ​​진행할 수 있으며 빌드 별 파일이 응용 프로그램 별 파일과 혼합되는 것을 방지 할 수 있습니다.

이렇게하면 위의 예에서 모든 항목을 ./로 바꾸면 src/됩니다.


1
파일을 재구성 한 후에 만 ​​완벽하게 작동했지만 귀하의 추론은 건전하므로 귀하의 답변을 올바른 것으로 표시하고 있습니다. 감사합니다.
makenova 2014

2
반대로하려면 gulp-flatten을 사용하십시오. stackoverflow.com/questions/21153338/…
Tony Gutierrez

2
이 작업을 수행 한 다른 사람을위한 메모 read로 src 의 옵션이 false( true기본적으로 설정되어 있음) 으로 설정되어 있지 않은지 확인하십시오 .
yndolok

3
이렇게하면 전체 루트 디렉토리와 함께 복사됩니다.
Nomadme 2015-08-27

5

원래 질문은에서 디렉토리 (폴더라고도 함) 만 대상 으로합니다 gulp.src. 즉 gulp.src(['_locales', ...,이 예에서는 디렉토리_locales 이름입니다 .

허용되는 대답은 해당 디렉토리의 모든 위치에있는 파일 을 대상으로 하는 glob패턴 을 사용합니다 ( 예 : 이중 별표filename.extension 별표). 수락 된 답변이 작동합니다 ...gulp.srcgulp.src(['./_locales/**/*.*', ...

... 하지만 받아 들여지는 대답은 base옵션을 강조합니다 .

src에 base옵션 을 포함해야합니다 ...

나는 실험하고 발견했다 :

  1. 엄밀히 말해서 baseOP가 요청한 것을 얻기 위해 옵션 을 사용할 필요가 없습니다 . "... 그리고 적절한 파일 을 깨끗한 디렉토리로 이동합니다 ." 이 base옵션 실제로 폴더 + 파일 구조를 유지 하지만 (수락 된 답변에 설명 된대로) OP가 요청 한대로 파일을 이동 하기base옵션이 충분하지 않습니다 . 폴더 + 파일 구조를 보존하는 것은 아마도 OP가 기대하는 것이므로 허용되는 대답은 좋지만 ...

  2. 그냥 무엇을 반복 할 않는 파일을 이동, 그것은의 glob패턴 :

    1. 이중 별표 ( .../**/...)는 모든 하위 폴더와 하위 폴더의 하위 폴더 등에서 반복적으로 검색합니다.

    2. Filename.extension 별표 ( .../*.*)는 모든 이름 과 모든 확장자의 파일 을 찾습니다 . 그래서 저는이 부분이 가장 강조 될 가치가 있다고 생각합니다!

  3. 받아 들여진 대답은 다른 것을 바꾼다. 에 ./전달 된 각 경로 인수에 의 접두사를 추가합니다 gulp.src. 나는 그것이 불필요 / 중복이라고 생각합니다. 없는 ./경우 (OP 질문에서와 같이) 경로는 현재 디렉토리를 기준으로 확인 되어 동일한 동작이 발생 합니다. 그러나 아마도 다음과 같이 명시하는 것이 좋습니다../

내가 틀렸다면 알려주세요 ...

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.