web-dev-qa-db-ja.com

gulpを使用して、ディレクトリとそのファイルを選択および移動します

現在、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/フォルダーにコピーするにはどうすればよいですか?

96
makenova

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/フォルダを使用して移動することをお勧めしますallアプリケーション固有のファイルをそこに入れます。これにより、メンテナンスが容易になり、ビルド固有のファイルがアプリケーション固有のファイルと混同されるのを防ぎます。

これを行う場合は、上記の例で./のすべての出現をsrc/に置き換えるだけです。

158
OverZealous

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

受け入れられた答えは、gulp.srcglob pattern を使用して、それらのディレクトリ内のfilesをターゲットにします。つまり、gulp.src(['./_locales/**/*.*', ...double-アスタリスク、およびfilename.extensionアスタリスク)。受け入れられた答えは機能します...

...しかし、受け入れられた答えはbaseオプションのみを強調します

Srcにbase optionを含める必要があります...

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

  1. 厳密に言えば、OPが要求したことを達成するためにbaseオプションを使用する必要はありません。「...そして適切なfilesをクリーンディレクトリに移動します。」 baseオプションが実際にfolder + fileを保持します構造体(受け入れられた回答で説明されています)が、baseオプションはOP askとしてファイルを移動するには十分ではありませんです。フォルダとファイルの構造を保存することは、おそらくOP が期待するなので、受け入れられた答えは良いですが...

  2. ファイルをする移動することを繰り返すために、それはglobパターンです:

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

    2. Filename.extensionアスタリスク(.../*.*)は、すべての名前、およびすべての拡張子filesを見つけます。 だからこの部分が最も重要だと思う!

  3. 受け入れられた答えは何か他のものを変えます。 ./に渡される各パス引数にgulp.srcのプレフィックスを追加します。それは不要/冗長だと思います。 (OPの質問のように)./がない場合、パスは現在のディレクトリに関連して解決されます-同じ動作になります。ただし、./を明示的に使用することをお勧めします

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

5
The Red Pea