Feature Request : Not Glob Pattern
Closed this issue · 2 comments
jmorille commented
Add a function that revert a glob pattern expression.
the ain is to have
notGlob('**/*.{scss,sass}') = '!**/*.{scss,sass}'
or
notGlob(!bower_components{,/**}' )= 'bower_components{,/**}',
A possible implementation could be something like that
var notGlob = function (elt) {
if (!elt) {
return undefined;
}
if ('string' === typeof elt) {
if ('!' === elt.slice(0, 1)) {
return elt.slice(1);
} else {
return '!' + elt;
}
} else if (Array.isArray(elt)) {
return elt.reduce(function (acc, current) {
var notelt = notGlob(current);
if (notelt) {
acc.push(notelt);
}
return acc;
}, []);
}
};
jmorille commented
The common use case is when you write some pattern for sass, and you want to copy the unmangement files...
like this sample, I believe that could be very usefull for many people and a good place to be.
var config_cp = {
src_patch: ['**', notGlob(src.sass), notGlob(src.bower_components)]
}
gulp.task('cp', function (cb) {
var DEST_DIR = path.build_generated;
return gulp.src(config_cp.src_patch, { cwd:path.app, base: path.app})
.pipe(cache('cping', {optimizeMemory: true}))
.pipe(changed(DEST_DIR))
.pipe(debug({title: 'changed:'}))
.pipe(gulp.dest(DEST_DIR));
});
gulp.task('sass', function () {
var DEST_DIR = path.build_generated;
var SASS_OPTS = prod ? {outputStyle: 'compressed'} : {};
return gulp.src(src.sass, {cwd: path.app, base: path.app })
.pipe(cache('sassing', {optimizeMemory: true}))
.pipe(changed(DEST_DIR, {extension: '.css'}))
.pipe(debug({title: 'changed:'}))
.pipe(sass(SASS_OPTS))
// Pass the compiled sass through the prefixer with defined
.pipe(prefix(
'last 2 version', 'safari 5', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4'
))
.pipe(gulp.dest(DEST_DIR));
});
yocontra commented
You should publish a module that does this, gulp-util is deprecated and won't have anything added to it. After gulp 4 we will recommend people don't use it.