2017-03-13 6 views
0

私はbowerからjQueryUIライブラリにコピーしています。私は2つのテーマを "themes"ディレクトリからコピーしたいだけです。私が保持したいテーマフォルダは、 "ベース"と "ui-lightness"です。その中の2つのサブディレクトリ以外のサブディレクトリを除外するグロビングパターンは何ですか?

どのようにグロビングパターンでこれを達成できますか?

├── 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

ガルプv4.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]前のグロブパターンで作成したリストから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/' } 

これは、このようなものになります:

{ base: './' } 

何かで結果:へbaseオプションを設定するなど

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

このように:

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

ガルプのv3.xの

否定!)が異なって扱われたため、残念ながら、上記の例ではガルプバージョン3.xでは動作しません - 彼らは関係なく、常に最後に行われましたそれらがグロブ内で指定された順番のうちArrayです。 issue 837で議論されている詳細情報。

回避策(v.3.xの場合)はgulp-src-ordered-globsを利用することです。この場合、前の例と同じArrayのglobを使用できます。

このためのコードは次のようになります。

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

は、私は代わりにこれをしなかったこの1

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'フォルダでは、私はその2つのテーマをコピーしたいだけです。 – Chad

+0

あなたができることは、最初のタスクで './bower_components/jqueryui/**' expect './bower_components/jqueryui/themes/ **'にあるすべてのものをコピーした後、上記の私のタスクが行うように2つのタスクを作成することです。 –

+0

私の更新された答えをチェックしてください。 –

0

をお試しください:私はこれを試してみた

...

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

は、ここでディレクトリ構造です。 1つのタスクでそれを理解するのは少し難しかったと思います。

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]; 
関連する問題