web-dev-qa-db-ja.com

タスク全体の作業ディレクトリを変更する

私は自分のサイトのフロントエンドとバックエンドの両方のタスクを含むgulpファイルに取り組んでいます。
たとえば、以下のタスクは、スクリプトをapp.jsに連結します。

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)

ご覧のとおり、正しいフロントエンドパスを提供するヘルパーを作成しました。

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

ただし、タスクのすべてのステップ(特に、.srcと.dest)がフロントエンドフォルダーで実行されるように注意する必要があります。

{ cwd: 'frontend' }オプションを使用して、.srcおよび.destの作業ディレクトリを変更できることを知っています。しかし、タスクの作業ディレクトリ全体を変更する方法はありますか?

13
Zyphrax

使用する process.chdir作業ディレクトリを変更します。 gulpfileのどこにでも変更を加えることができます。または、状況に応じて、タスク内で変更することもできます。

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

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

Gulpの最新バージョンを使用していることを確認してください。この機能は 最近追加された のようです。

27
gfaceless

Gulpが機能する方法では、srcdestの間のステップで「ディレクトリを変更する」ことは意味がありません。

gulp.srcは、ファイルをディスクからメモリに読み取ります。 .pipesその後、それらのファイルの内容(およびファイルに関連するメタデータ-詳細については ビニールファイルオブジェクト を参照)を他のjavascript関数にパイプします。これらの関数はそれぞれメモリ内バージョンで動作します。ファイル。つまり、彼らは作業ディレクトリについて知らないか、気にしないということです。彼らは、ファイルに関する着信データがパイプを介して入ってくるのを見て、そのデータに何かを行い、次の.pipe

ですから、親ディレクターにいることに本当に偏執的であるなら、srcとdestにcwdするのが最善だと思います。

つまり、 shelljs を見ると、現在のノードプロセスのディレクトリを変更できます。これは、物事をパイピングするときにアンチパターンと見なされる可能性があると思いますが、一見の価値があるかもしれません。

3
thataustin