使用gulpselect并移动目录及其文件

我目前正在使用gulp调用清理我的dist/目录的bash脚本,并将相应的文件移动到干净的目录中。 我想这样做是因为我不确定脚本是否可以在非* nix文件系统上工作。
到目前为止,我正在使用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/文件夹?

您需要将base选项包含在src中,它将以您想要的方式保留文件结构:

 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')); }); 

另外,如果将所有这些源文件都放在项目的根目录下,那么您可能会遇到麻烦。

如果可以的话,我build议你使用一个单独的src/文件夹,并将所有应用程序特定的文件移动到那里。 这使得维护更容易,而且可以防止构build特定的文件与应用程序特定的文件混淆。

如果你这样做,那么在上面的例子中简单地replace所有出现的./src/

原来的问题只针对其gulp.src 目录 (又名文件夹),即gulp.src(['_locales', ...在这个例子中, _locales是一个目录的名称。

接受的答案在其gulp.src使用一个glob模式来定位这些目录中任何地方的文件, gulp.src(['./_locales/**/*.*', ... /*.* gulp.src(['./_locales/**/*.*', ... ,(注意双星号 ,和filename.extension星号)。接受的答案工程…

但接受的答案只强调base选项

您需要包含base选项,以src …

我试验发现:

  1. 严格地说,没有必要使用base选项来实现OP所要求的内容:“…并将适当的文件移动到干净的目录中”。 base选项确实保留了文件夹+文件 结构 (如接受的答案中所述),但base选项不足以按OP 要求移动文件。 保留文件夹+文件结构可能是OP的期望 ,所以接受的答案是好的,但…

  2. 只是重申什么移动文件,这是glob模式:

    1. 双星号( .../**/... )在所有子文件夹和子文件夹的子文件夹等中recursionsearch。

    2. Filename.extension asterisks( .../*.* )查找所有名称和所有扩展 名的 文件所以我认为这部分最值得强调!

  3. 被接受的答案改变了别的东西; 它为每个传递给gulp.srcpath参数添加一个./的前缀。 我认为这是不必要的/多余的; 如果没有./ (如在OP问题中那样),则path相对于当前目录被parsing – 导致相同的行为 。 但也许这是一个很好的做法,明确的./

让我知道如果我错了…