UNPKG

persistify

Version:

a wrapper around `browserify` and `watchify` to make incremental builds without the need of the watch mode

124 lines (105 loc) 3.29 kB
#!/usr/bin/env node /* eslint-disable no-console */ var fs = require( 'fs' ); var path = require( 'path' ); var outpipe = require( 'outpipe' ); var subarg = require( 'subarg' ); var nodeConsole = console; function run() { var _argv = process.argv.slice( 2 ); var persistifyArgs = subarg( _argv, { alias: { 'n': 'never-cache', 'd': 'cache-dir' } } ); var watch = persistifyArgs.watch; var recreate = persistifyArgs.recreate; var neverCache = persistifyArgs[ 'never-cache' ]; var cacheId = persistifyArgs[ 'cache-id' ]; var cacheDir = persistifyArgs[ 'cache-dir' ]; var w = require( '../' )( null, { cacheId, cacheDir, command: _argv.join( ' ' ), neverCache, watch, recreate }, process.argv.slice( 2 ) ); var outfile = w.argv.o || w.argv.outfile; var verbose = w.argv.v || w.argv.verbose; if ( w.argv.version ) { nodeConsole.error( 'persistify v' + require( '../package.json' ).version + ' (in ' + path.resolve( __dirname, '..' ) + ')' ); nodeConsole.error( 'watchify v' + require( 'watchify/package.json' ).version + ' (in ' + path.dirname( require.resolve( 'watchify' ) ) + ')' ); nodeConsole.error( 'browserify v' + require( 'browserify/package.json' ).version + ' (in ' + path.dirname( require.resolve( 'browserify' ) ) + ')' ); return; } if ( !outfile ) { nodeConsole.error( 'You MUST specify an outfile with -o.' ); process.exit( 1 ); //eslint-disable-line } var bytes, time; if ( watch ) { w.on( 'bytes', function ( b ) { bytes = b; } ); w.on( 'time', function ( t ) { time = t; } ); } else { w.on( 'bundle:done', function ( t ) { time = t; } ); } w.on( 'skip:cache', function ( file ) { if ( !verbose ) { return; } nodeConsole.error( 'skip file from cache:', file ); } ); function bundle() { var didError = false; var outStream = process.platform === 'win32' ? fs.createWriteStream( outfile ) : outpipe( outfile ); var wb = w.bundle(); wb.on( 'error', function ( err ) { nodeConsole.error( String( err ) ); didError = true; outStream.end( 'console.error(' + JSON.stringify( String( err ) ) + ');' ); } ); wb.pipe( outStream ); outStream.on( 'error', function ( err ) { nodeConsole.error( 'persistify error: ', err ); } ); outStream.on( 'close', function () { if ( didError && !watch ) { nodeConsole.error( 'persistify failed...' ); process.exit( 1 ); //eslint-disable-line } if ( verbose && !didError ) { if ( watch ) { nodeConsole.error( bytes + ' bytes written to ' + outfile + ' (' + (time / 1000).toFixed( 2 ) + ' seconds)' ); } else { nodeConsole.error( 'bundle done! ' + ' (' + (time / 1000).toFixed( 2 ) + ' seconds)' ); } } } ); } w.on( 'update', bundle ); bundle(); } try { require.resolve( 'browserify' ); require.resolve( 'watchify' ); } catch (x) { console.error( 'browserify and watchify are mandatory, please install them separatedly!' ); console.error( ' npm i --save-dev browserify watchify ' ); process.exit( 1 ); // eslint-disable-line } run();