2017-03-13 29 views
0

我正在從bower複製jQueryUI庫。我只想從他們的「主題」目錄複製兩個主題。我想要保留的主題文件夾是「基本」和「ui-lightness」。什麼符號模式將排除子目錄,除了其中的兩個其他子目錄?

我該如何使用globbing模式來完成此操作?

我已經試過這...

gulp.src([ 
    './bower_components/jqueryui/**', 
    '!./bower_components/jqueryui/themes/**(!base/**)' 
]) 

這裏是目錄結構:

├── themes 
│   ├── base 
│   ├── black-tie 
│   ├── blitzer 
│   ├── cupertino 
│   ├── dark-hive 
│   ├── dot-luv 
│   ├── eggplant 
│   ├── excite-bike 
│   ├── flick 
│   ├── hot-sneaks 
│   ├── humanity 
│   ├── le-frog 
│   ├── mint-choc 
│   ├── overcast 
│   ├── pepper-grinder 
│   ├── redmond 
│   ├── smoothness 
│   ├── south-street 
│   ├── start 
│   ├── sunny 
│   ├── swanky-purse 
│   ├── trontastic 
│   ├── ui-darkness 
│   ├── ui-lightness 
│   └── vader 
└── ui 
    ├── i18n 
    └── minified 

回答

1

咕嘟咕嘟4.x版

目前一飲而盡文檔包括可定製,以滿足您的要求的例子glob pattern。請嘗試以下操作:

gulp.task('copyfoobar', function() { 
    gulp.src([ 
     'bower_components/jqueryui/**', // [1] 
     '!bower_components/jqueryui/themes/**', // [2] 
     'bower_components/jqueryui/themes/{base,ui-lightness}/**' // [3] 
    ], { base: './' }) 
    .pipe(gulp.dest('./dist')); 
}); 

上面顯示水珠的Array執行以下操作:

  • [1]匹配的bower_components/jqueryui/目錄下的一切。
  • [2]從通過上一個glob模式創建的列表中取消bower_components/jqueryui/themes目錄(及其中的所有內容)。
  • [3]bower_components/jqueryui/themes/basebower_components/jqueryui/themes/ui-lightness目錄(及其中的所有內容)添加回列表中。

注:上面的解決方案假定bower_components目錄駐留在相同的目錄中gulpfile.js,目標目錄是dist

合力目錄樹:

如果你不想bower_components目錄添加到您的目標/目標目錄,(即dist),然後設置base選項:

{ base: './bower_components/' } 

這將導致這樣的事情:

. 
└── dist 
    └── jqueryui 
     ├── themes 
     │ ├── base 
     │ │ └── ... 
     │ └── ui-lightness 
     │  └── ... 
     └── ... 

凡作爲base選項設置爲:

{ base: './' } 

結果的東西像這樣:

. 
└── dist 
    └── bower_components 
     └── jqueryui 
      ├── themes 
      │ ├── base 
      │ │ └── ... 
      │ └── ui-lightness 
      │  └── ... 
      └── ... 

咕嘟咕嘟3.x版

不幸的是,上面的例子中不咕嘟咕嘟3.x版工作因爲否定之否定!)進行不同的處理方式 - 他們總是最後完成,無論它們在glob Array中指定的順序。在issue 837討論的更多信息。

解決方法(適用於v.3.x)是利用gulp-src-ordered-globs,它允許您使用與前面示例相同的Array球體。

該代碼,這將是:

var gulpSrc = require('gulp-src-ordered-globs'); // require the gulp.src() wrapper. 

gulp.task('copyfoobar', function() { 
    gulpSrc([ // <-- gulpSrc() used instead of gulp.src() 
     'bower_components/jqueryui/**', 
     '!bower_components/jqueryui/themes/**', 
     'bower_components/jqueryui/themes/{base,ui-lightness}/**' 
    ], { base: './' }) 
    .pipe(gulp.dest('./dist')); 
}); 
+0

哇,很好的回答!這正是我需要的。 – Chad

+0

我的榮幸和謝謝你:) – RobC

0

試試這個

gulp.task('copy_flolder',function(){ 
    gulp.src(['./bower_components/jqueryui/**', '!./bower_components/jqueryui/themes/**']) 
    .pipe(gulp.dest('your dist folder')) 
    }); 
    gulp.task('copy_only_Themes',['copy_flolder'], function() { 
    gulp.src(['./bower_components/jqueryui/themes/base/**', './bower_components/jqueryui/themes/ui-lightness/**']) 
    .pipe(gulp.dest('your dist folder')) 
}); 
+0

我還是要在'「./bower_components/jqueryui/**」'複製一切。但是在'themes'文件夾中,我只想複製這兩個主題。 – Chad

+0

所以你可以做的就是在第一個任務中創建兩個任務將複製'./bower_components/jqueryui/**'expect'./bower_components/jqueryui/themes/**'中的所有內容,之後我的上述任務將會完成。 –

+0

檢查我的更新答案。 –

0

我只是做這個代替。我認爲在一項任務中弄清楚它有點太難了。

var task1 = gulp.src(base + 'jqueryui/*.*').pipe(gulp.dest(target)); 
var task2 = gulp.src(base + 'jqueryui/ui/**').pipe(gulp.dest(target + '/ui/')); 
var task3 = gulp.src(base + 'jqueryui/themes/base/**').pipe(gulp.dest(target + '/themes/base/')); 
var task4 = gulp.src(base + 'jqueryui/themes/ui-lightness/**').pipe(gulp.dest(target + '/themes/ui-lightness/')); 

return [task1, task2, task3, task4];