Npmモジュール node-glob を使用しています。
このスニペットは、現在の作業ディレクトリ内のすべてのファイルを再帰的に返します。
var glob = require('glob');
glob('**/*', function(err, files) {
console.log(files);
});
サンプル出力:
[ 'index.html', 'js', 'js/app.js', 'js/lib.js' ]
index.htmlとjs/lib.jsを除外したいです。これらのファイルを除外パターン '!'で除外しようとしましたが、運はありません。パターンを使用するだけでこれを達成する方法はありますか?
私はそれがもう実際ではないと思うが、私は同じ質問にこだわって答えを見つけた。
これは、npm glob
モジュールのみを使用して実行できます。 glob
関数の2番目のパラメーターとして options を使用する必要があります
glob('pattern', {options}, cb)
必要に応じてoptions.ignore
パターンがあります。
var glob = require('glob');
glob("**/*",{"ignore":['index.html', 'js', 'js/app.js', 'js/lib.js']}, function (err, files) {
console.log(files);
})
そのために node-globule を使用できます:
var globule = require('globule');
var result = globule.find(['**/*', '!index.html', '!js/lib.js']);
console.log(result);
これが私のプロジェクトのために書いたものです:
var glob = require('glob');
var minimatch = require("minimatch");
function globArray(patterns, options) {
var i, list = [];
if (!Array.isArray(patterns)) {
patterns = [patterns];
}
patterns.forEach(function (pattern) {
if (pattern[0] === "!") {
i = list.length-1;
while( i > -1) {
if (!minimatch(list[i], pattern)) {
list.splice(i,1);
}
i--;
}
}
else {
var newList = glob.sync(pattern, options);
newList.forEach(function(item){
if (list.indexOf(item)===-1) {
list.Push(item);
}
});
}
});
return list;
}
そして、このように呼び出します(配列を使用):
var paths = globArray(["**/*.css","**/*.js","!**/one.js"], {cwd: srcPath});
またはこれ(単一の文字列を使用):
var paths = globArray("**/*.js", {cwd: srcPath});
Gulpのサンプル例:
gulp.task('task_scripts', function(done){
glob("./assets/**/*.js", function (er, files) {
gulp.src(files)
.pipe(gulp.dest('./public/js/'))
.on('end', done);
});
});