browserify.js (1976B)
1 'use strict'; 2 3 const browserify = require('browserify'); 4 const globby = require('globby'); 5 const path = require('path'); 6 const fs = require('fs-extra'); 7 const { getSignatures, writeSignatures, cleanUp, compareSignatures, getFileSignature, onSuccess, onError, onProgress } = require('./utils'); 8 9 const { browserifyConfigs } = require('./config'); 10 const ROOT = path.resolve(__dirname, '..'); 11 12 async function getBrowserify(signatures) { 13 const t1 = Date.now(); 14 var count = 0; 15 var config, f, totalCount; 16 17 while ((config = browserifyConfigs.pop()) != null) { 18 let files = await globby(config.src, { cwd: ROOT }); 19 totalCount += files.length; 20 21 while ((f = files.pop()) != null) { 22 let newFileSignature = await getFileSignature(f); 23 const dest = path.join('build', config.dest); 24 25 if (f in signatures) { 26 if (compareSignatures(newFileSignature, signatures[f])) { 27 try { 28 await fs.access(dest, fs.constants.F_OK); 29 continue; 30 } catch (_) { 31 // file does not exists in build, fallback to browserifing 32 } 33 } 34 } 35 try { 36 await fs.mkdirp(path.dirname(dest)); 37 const bundleFs = fs.createWriteStream(dest); 38 await new Promise((resolve, reject) => { 39 bundleFs 40 .on('error', reject) 41 .on('finish', resolve); 42 browserify(f, config.config).bundle().pipe(bundleFs); 43 }); 44 45 onProgress(f, dest, 'browserify'); 46 signatures[f] = newFileSignature; 47 count++; 48 } catch (err) { 49 throw new Error(`Failed on ${f}: ${err}`); 50 } 51 } 52 } 53 54 const t2 = Date.now(); 55 return { 56 action: 'browserify', 57 count, 58 totalCount, 59 processingTime: t2 - t1 60 }; 61 } 62 63 module.exports = getBrowserify; 64 65 if (require.main === module) { 66 (async () => { 67 try { 68 const signatures = await getSignatures(); 69 onSuccess(await getBrowserify(signatures)); 70 onSuccess(await cleanUp(signatures)); 71 await writeSignatures(signatures); 72 } catch (err) { 73 process.exitCode = 1; 74 global.isError = true; 75 onError(err); 76 } 77 })(); 78 }