zotero/scripts/browserify.js
Dan Stillman 963329df28 Set 'react' and 'react-dom' as externals for browserify
When browserifying anything that depends on React, don't bundle another
copy of React in the file. There might be some other common dependencies
that we should include here.
2019-11-08 06:41:06 -05:00

82 lines
No EOL
2 KiB
JavaScript

'use strict';
const browserify = require('browserify');
const globby = require('globby');
const path = require('path');
const fs = require('fs-extra');
const { getSignatures, writeSignatures, cleanUp, compareSignatures, getFileSignature, onSuccess, onError, onProgress } = require('./utils');
const { browserifyConfigs } = require('./config');
const ROOT = path.resolve(__dirname, '..');
async function getBrowserify(signatures) {
const t1 = Date.now();
var count = 0;
var config, f, totalCount;
while ((config = browserifyConfigs.pop()) != null) {
let files = await globby(config.src, { cwd: ROOT });
totalCount += files.length;
while ((f = files.pop()) != null) {
let newFileSignature = await getFileSignature(f);
const dest = path.join('build', config.dest);
if (f in signatures) {
if (compareSignatures(newFileSignature, signatures[f])) {
try {
await fs.access(dest, fs.constants.F_OK);
continue;
} catch (_) {
// file does not exists in build, fallback to browserifing
}
}
}
try {
await fs.mkdirp(path.dirname(dest));
const bundleFs = fs.createWriteStream(dest);
await new Promise((resolve, reject) => {
bundleFs
.on('error', reject)
.on('finish', resolve);
browserify(f, config.config)
.external('react')
.external('react-dom')
.bundle()
.pipe(bundleFs);
});
onProgress(f, dest, 'browserify');
signatures[f] = newFileSignature;
count++;
} catch (err) {
throw new Error(`Failed on ${f}: ${err}`);
}
}
}
const t2 = Date.now();
return {
action: 'browserify',
count,
totalCount,
processingTime: t2 - t1
};
}
module.exports = getBrowserify;
if (require.main === module) {
(async () => {
try {
const signatures = await getSignatures();
onSuccess(await getBrowserify(signatures));
onSuccess(await cleanUp(signatures));
await writeSignatures(signatures);
} catch (err) {
process.exitCode = 1;
global.isError = true;
onError(err);
}
})();
}