親ディレクトリに基づいてgulpでファイルをコピーして名前を変更する方法を探しています


91

各モジュールについて、ビルドディレクトリにコピーする必要があるいくつかのファイルがあり、これから繰り返されるコードを最小限に抑える方法を探しています。

gulp.src('./client/src/modules/signup/index.js')
  .pipe(gulp.dest('./build/public/js/signup'));

gulp.src('./client/src/modules/admin/index.js')
  .pipe(gulp.dest('./build/public/js/admin'));

このようなものに:

gulp.src('./client/src/modules/(.*)/index.js')
  .pipe(gulp.dest('./build/public/js/$1'));

明らかに上記は機能しないので、これを行う方法、またはすでにこれを実行するnpmはありますか?

ありがとう

回答:


131

最善の方法はbase、次のようにファイルを調達するときにを設定することです。

gulp.src('./client/src/modules/**/index.js', {base: './client/src/modules'})
  .pipe(gulp.dest('./build/public/js/'));

これはgulp、相対パスを決定するための開始点としてモジュールディレクトリを使用するように指示します。

(また、/**/*.jsすべてのJSファイルを含める場合に使用できます...)


6
これを行うには、より動的な方法が必要です。srcファイルが2つの異なるディレクトリにあり、それらのディレクトリをdestに保持したい場合はどうでしょうか。
Ivan Durst

1
@IvanDurst OP(answer)コードでこの特定のケースを管理しました。基本構成使用し、gulpファイルから独立ファイルおよび./folder-example/**完全なフォルダーとファイルへの相対パスを使用します。
Caio Wilson

210

答えではありませんが、この質問の検索結果での表示に適用されます。

gulpでファイル/フォルダをコピーするには

gulp.task('copy', () => gulp
  .src('index.js')
  .pipe(gulp.dest('dist'))
);

2
うーん...私のタスクはこのタスクが完了したと言いますが、出力ファイルは存在しません。
Tyguy7 2015年

4
タスクが終了したときにGulpに通知するには、ストリームを返す必要があります。
メロット

2
「回答ではない」という回答の方が、質問に回答する承認済みの回答よりも賛成票が多いのはなぜですか。質問への回答を提供するのではなく、検索エンジンに特定のことを実行させるように設計された回答でSOを散らかすべきかどうかはわかりません。サイトをクロールしたときに得られるものを役立つものにするのは、検索エンジンの仕事だと思います。ちょうど私の$ 0.02
jinglesthula

9
@jinglesthulaこれは、検索エンジンがどれだけうまく機能しているかに関係なく、検索エンジンを介してこの質問に到達した人にとって便利なサービスです。それは有り難いです。
jbkly

1
これは正しい質問や正しい答えよりも人気があると
気づきました

5
return gulp.src('./client/src/modules/(.*)/index.js')  
  .pipe(gulp.dest('./build/public/js/$1'));

私のために働いた!


..それでも、これ答えです。
Kirk Strobeck、2014年

2
...それで、誰かがそれをそのまま機能するように書き換えることができます。そのため、このページにアクセスして、そのコードスニペットを探している人が実際に使用できますか?
Ivan Durst

それで... src / dest globsで括弧と$ n「後方参照」が許可されていますか?彼らは正規表現ではない、アファイク。これは私が探しているもののように見えますが、vinyl-fsのドキュメントは.src()および.dest()オプションについてはかなり簡潔であり、それらに許可されているものとそれらがどのように機能するかを示しています。
jinglesthula

3

入力ディレクトリツリーを保持するための使用は保持されます。

.pipe(gulp.dest(function(file) {
    var src = path.resolve(SRC_FOLDER);
    var final_dist = file.base.replace(src, '');
    return DIST_FOLDER + final_dist;
}))

これを使用して、src:に入れることができます.src(SRC_FOLDER + '/**/*.js')

他の人の答えは(使用してのように私のために働いていないbase:src()、一部のプラグインは、ディレクトリツリーをフラット化するので、}。


0

ファイルを並行してコピーする

gulp.task('copy', gulp.parallel(
() =>  gulp.src('*.json').pipe(gulp.dest('build/')),
() =>  gulp.src('*.ico').pipe(gulp.dest('build/')),
() =>  gulp.src('img/**/*').pipe(gulp.dest('build/img/')),
)
);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.