www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | Submodules | README | LICENSE

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 }