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 distdist/ディレクトリに正しいディレクトリが入力されますが、すべて空です。

$ 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/…–
トニーグティエレス

2
これを行った他の人へのメモとして、readsrcにオプションが設定されていないことを確認してくださいfalsetrueデフォルトで設定されています)。
yndolok 2014年

3
これを行うと、ルートディレクトリ全体がコピーされます。
Nomadme 2015

5

元の質問は 、その中のディレクトリ(別名フォルダ)のみを対象としていますgulp.src。つまりgulp.src(['_locales', ...、この例で_localesは、ディレクトリの名前です。

受け入れられた回答は、それらのディレクトリ内の任意の場所にあるファイルを対象とするglobパターン を使用します(つまり、ダブルアスタリスクファイル名拡張子アスタリスクに注意してください)。受け入れられた答えは機能します...gulp.srcgulp.src(['./_locales/**/*.*', ...

... しかし、受け入れられた答えはbaseオプションを強調するだけです:

srcへのbaseオプションを含める必要があります ...

私は実験して見つけました:

  1. 厳密に言うとbase、OPが要求したことを実現するためにオプションを使用する必要はありません。「適切なファイルをクリーンディレクトリに移動します。」このbaseオプション確かにフォルダーとファイルの 構造を保持しますが(受け入れられた回答に記載されています)、OPが要求したようにファイルを移動するにbaseはこのオプションでは不十分です。フォルダーとファイルの構造を維持することは、おそらくOPが期待することなので、受け入れられた答えは適切ですが...

  2. ファイルを移動するかを繰り返すと、それはglobパターンです。

    1. ダブルアスタリスク(.../**/...)は、すべてのサブフォルダー、サブフォルダーのサブフォルダーなどを再帰的に検索します。

    2. Filename.extensionのアスタリスク(.../*.*)は、すべての名前とすべての拡張子のファイルを検索しますだから、この部分が最も強調に値すると思います!

  3. 受け入れられた答えは何か他のものを変えます。に./渡される各パス引数に接頭辞を追加しますgulp.src。それは不要/冗長だと思います。がない./場合(OPの質問のように)、パスは現在のディレクトリからの相対パスで解決され、同じ動作になります。しかし、多分それを明示することは良い習慣です./

間違えたら教えてください...

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.