使用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 …
我试验发现:
-
严格地说,没有必要使用
base
选项来实现OP所要求的内容:“…并将适当的文件移动到干净的目录中”。base
选项确实保留了文件夹+文件 结构 (如接受的答案中所述),但base
选项不足以按OP 要求移动文件。 保留文件夹+文件结构可能是OP的期望 ,所以接受的答案是好的,但… -
只是重申什么是移动文件,这是
glob
模式:-
双星号(
.../**/...
)在所有子文件夹和子文件夹的子文件夹等中recursionsearch。 -
Filename.extension asterisks(
.../*.*
)查找所有名称和所有扩展 名的 文件 。 所以我认为这部分最值得强调!
-
-
被接受的答案改变了别的东西; 它为每个传递给
gulp.src
path参数添加一个./
的前缀。 我认为这是不必要的/多余的; 如果没有./
(如在OP问题中那样),则path相对于当前目录被parsing – 导致相同的行为 。 但也许这是一个很好的做法,明确的./
让我知道如果我错了…