2014-10-11 2 views
10

내 사이트의 프론트 엔드 및 백엔드에 대한 작업을 포함하는 꿀꺽 꿀꺽하는 파일을 만들고 있습니다.
예는 app.js에 내 스크립트를 CONCAT합니다 아래 작업 :전체 작업에 대한 Gulp 변경 작업 디렉토리

frontendPath = (dirs...) -> path.join.apply null, ['frontend'].concat(dirs) 

하지만 내가 가진 : 당신은 내가 올바른 프론트 엔드 경로를 제공하는 도우미를 만든 볼 수 있듯이

gulp.task 'frontend:scripts', -> 
    gulp.src frontendPath(scriptsFolder, scriptsPattern) 
     .pipe sourcemaps.init() 
     .pipe coffee() 
     .pipe concat 'app.js' 
     .pipe sourcemaps.write('.') 
     .pipe gulp.dest frontendPath(tempFolder, scriptsFolder) 

내 작업 (특히 .src 및 .dest)의 모든 단계가 프론트 엔드 폴더에서 실행된다는 점에주의하십시오.

{ cwd: 'frontend' } 옵션을 사용하면 .src 및 .dest의 작업 디렉토리를 변경할 수 있다는 것을 알고 있습니다. 하지만 작업을위한 전체 작업 디렉토리를 변경하는 방법이 있습니까?

답변

24

process.chdir을 사용하여 작업 디렉토리를 변경하십시오. 우리는 gulpfile에서 어디에서든지 변경 작업을 수행 할 수 있으며, 상황에 따라 작업 내에서 변경할 수 있습니다.

gulp.task('frontend', function(){ 
    process.chdir('...'); 
    gulp.src(...) 
}); 

gulp.task('backend', function(){ 
    process.chdir('...'); 
    gulp.src(...) 
}); 

이 꿀꺽 꿀꺽의 최신 버전을 사용하고 있는지 확인 이 기능을 added recently 것 같다.

3

멍청이가 작동하는 방식으로 srcdest 사이의 단계에서 "디렉토리를 변경"하는 것이 의미가 없습니다.

gulp.src은 디스크에서 메모리로 파일을 읽습니다. 그러면 .pipe은 그 파일의 내용 (그리고 파일과 관련된 메타 데이터 - 자세한 내용은 Vinyl file objects 참조)을 다른 자바 스크립트 함수 (파일의 메모리 버전에서만 작동하는)로 파이프합니다. 즉, 작업 디렉토리에 대해 알지 못하거나 하나에 대해 신경 쓰지 않습니다. 그들은 파이프를 통해 들어오는 파일에 대한 들어오는 데이터를보고 그 데이터를 채우고 다음 .pipe을 통해 보내십시오.

부모님이 정말 편집증 환자라면 src와 dest에 cwd이 최선이라고 생각합니다.

모두 당신은 현재 노드 프로세스에 대한 디렉토리를 변경할 수있는 shelljs을 볼 수 있습니다. 내 생각에 이것은 주변을 둘러 볼 때 반 패턴으로 간주 될 수 있지만 한 번 해보는 것이 좋습니다.

+0

답장을 보내 주셔서 감사합니다. 'src'와'dest' 사이의 단계에서 작업 폴더를 변경하고 싶지는 않습니다. 전체 작업을 하위 폴더에서 실행하고 싶습니다. 이제 모든 glob에 접미사를 추가해야합니다 (또는'src'와'dest'에'cwd :'를 제공해야합니다). 나는 더 나은 방법을 기대했다. – Zyphrax

+0

충분히 좋으면 shelljs 모듈이 여러분의 친구 일 것 같아요. Fwiw, 나는 서브 디렉토리의 접두사를 붙이는 것이 꽤 일반적인 관행이라고 생각한다. – thataustin

+0

여러 폴더에서 여러 명령을 실행하려면이 명령은 현재 작업 디렉토리에서만 작동합니까? 예를 들어'serverless deploy'를 실행합니다. – Tom