Pack CSS into common shared bundles.
Features:
- Accept patterns to add entries.
- Use
depsifyto pack css files into bundles. - Use
postcssto preprocess css. - Use
watchify2to watch files, which is able to detect new entries. - Use
common-bundleto create common shared modules by default, which makeb.bundle()output a stream manipulatable bygulpplugins.
Check the example.
varreduce=require('reduce-css')vardel=require('del')varpath=require('path')bundle(createBundler())functioncreateBundler(watch){varbasedir=path.join(__dirname,'src')varb=reduce.create(/* glob for entries */'*.css',/* options for depsify */{
basedir,cache: {},packageCache: {},},/* options for common-bundle */// single bundle// 'bundle.css',// multiple bundles{groups: '*.css',common: 'common.css',},/* options for watchify2 */watch&&{entryGlob: '*.css'})returnb}functionbundle(b){varbuild=path.join(__dirname,'build')del.sync(build)returnb.bundle().on('error',log).pipe(b.dest(build,{maxSize: 0,name: '[name].[hash]',assetOutFolder: path.join(build,'assets'),}))}functionlog(){console.log.apply(console,[].map.call(arguments,function(msg){if(typeofmsg==='string'){returnmsg}returnJSON.stringify(msg,null,2)}))}To watch file changes:
varb=createBundler(true)b.on('update',functionupdate(){bundle(b)returnupdate}())To work with gulp:
vargulp=require('gulp')gulp.task('build',function(){returnbundle(createBundler())})gulp.task('watch',function(cb){varb=createBundler(true)b.on('update',functionupdate(){bundle(b)returnupdate}())b.on('close',cb)})varreduce=require('reduce-css')varb=reduce.create(entries,depsifyOptions,bundleOptions,watchifyOptions)Return a depsify instance.
entries: patterns to locate input files. Checkglobbyfor more details.depsifyOptions: options fordepsify. IfdepsifyOptions.postcssis notfalse, the pluginreduce-css-postcssfordepsifyis applied, which usepostcssto preprocess css.bundleOptions: options forcommon-bundle.watchifyOptions: options forwatchify2. If specified, file changes are watched.
Return a vinyl stream,
which can be processed by gulp plugins.
b.bundle().pipe(require('gulp-uglifycss')()).pipe(b.dest('build'))Works almost the same with gulp.dest,
except that file contents are transformed using postcss-custom-url
before written to disk.
urlTransformOptions is passed to both
the inline
and copy
transformers for postcss-custom-url.
The actual processor:
varurl=require('postcss-custom-url')varpostcss=require('postcss')varurlProcessor=postcss(url([[url.util.inline,urlTransformOptions],[url.util.copy,urlTransformOptions],]))