135 lines
3.6 KiB
JavaScript
135 lines
3.6 KiB
JavaScript
|
'use strict';
|
||
|
|
||
|
const rollup = require('rollup');
|
||
|
const replace = require('rollup-plugin-replace');
|
||
|
const minify = require('rollup-plugin-babel-minify');
|
||
|
const fs = require('fs');
|
||
|
const path = require('path');
|
||
|
const pkgJson = require('../package.json');
|
||
|
|
||
|
const rootDir = path.join(__dirname, '..');
|
||
|
const srcDir = path.join(rootDir, 'src');
|
||
|
const dstDir = path.join(rootDir, 'dist');
|
||
|
|
||
|
const buildOptions = [
|
||
|
{ // Browser
|
||
|
input: {
|
||
|
input: path.join(srcDir, 'main.js'),
|
||
|
plugins: [
|
||
|
replace({
|
||
|
'process.browser': true
|
||
|
})
|
||
|
]
|
||
|
},
|
||
|
output: {
|
||
|
file: path.join(dstDir, `${pkgJson.name}-${pkgJson.version}.browser.js`),
|
||
|
format: 'iife',
|
||
|
name: camelise(pkgJson.name)
|
||
|
}
|
||
|
},
|
||
|
// { // Browser minified
|
||
|
// input: {
|
||
|
// input: path.join(srcDir, 'main.js'),
|
||
|
// plugins: [
|
||
|
// replace({
|
||
|
// 'process.browser': true
|
||
|
// }),
|
||
|
// minify({
|
||
|
// 'comments': false
|
||
|
// })
|
||
|
// ],
|
||
|
// },
|
||
|
// output: {
|
||
|
// file: path.join(dstDir, `${pkgJson.name}-${pkgJson.version}.browser.min.js`),
|
||
|
// format: 'iife',
|
||
|
// name: camelise(pkgJson.name)
|
||
|
// }
|
||
|
// },
|
||
|
{ // Browser esm
|
||
|
input: {
|
||
|
input: path.join(srcDir, 'main.js'),
|
||
|
plugins: [
|
||
|
replace({
|
||
|
'process.browser': true
|
||
|
})
|
||
|
]
|
||
|
},
|
||
|
output: {
|
||
|
file: path.join(dstDir, `${pkgJson.name}-${pkgJson.version}.browser.mod.js`),
|
||
|
format: 'esm'
|
||
|
}
|
||
|
},
|
||
|
// { // Browser esm minified
|
||
|
// input: {
|
||
|
// input: path.join(srcDir, 'main.js'),
|
||
|
// plugins: [
|
||
|
// replace({
|
||
|
// 'process.browser': true
|
||
|
// }),
|
||
|
// minify({
|
||
|
// 'comments': false
|
||
|
// })
|
||
|
// ],
|
||
|
// },
|
||
|
// output: {
|
||
|
// file: path.join(dstDir, `${pkgJson.name}-${pkgJson.version}.browser.mod.min.js`),
|
||
|
// format: 'esm'
|
||
|
// }
|
||
|
// },
|
||
|
{ // Node
|
||
|
input: {
|
||
|
input: path.join(srcDir, 'main.js'),
|
||
|
plugins: [
|
||
|
replace({
|
||
|
'process.browser': false
|
||
|
})
|
||
|
]
|
||
|
},
|
||
|
output: {
|
||
|
file: path.join(dstDir, `${pkgJson.name}-${pkgJson.version}.node.js`),
|
||
|
format: 'cjs'
|
||
|
}
|
||
|
}
|
||
|
];
|
||
|
|
||
|
for (const options of buildOptions) {
|
||
|
build(options);
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
// Let's manually build the worker file
|
||
|
const workerFilename = path.join(srcDir, 'workerPrimalityTest.js');
|
||
|
const dstFileName = path.join(dstDir, 'workerPrimalityTest.js');
|
||
|
|
||
|
const workerFile = fs.readFileSync(workerFilename, 'utf-8');
|
||
|
|
||
|
fs.writeFileSync(dstFileName, workerFile.replace('{{IIFE}}', `./${pkgJson.name}-latest.browser.js`));
|
||
|
|
||
|
|
||
|
|
||
|
/* --- HELPLER FUNCTIONS --- */
|
||
|
|
||
|
async function build(options) {
|
||
|
// create a bundle
|
||
|
const bundle = await rollup.rollup(options.input);
|
||
|
|
||
|
// generate code
|
||
|
await bundle.generate(options.output);
|
||
|
|
||
|
// or write the bundle to disk
|
||
|
await bundle.write(options.output);
|
||
|
|
||
|
// copy the latest build as pkg_name-latest
|
||
|
fs.copyFileSync(
|
||
|
options.output.file,
|
||
|
options.output.file.replace(`${pkgJson.name}-${pkgJson.version}.`, `${pkgJson.name}-latest.`)
|
||
|
);
|
||
|
}
|
||
|
|
||
|
function camelise(str) {
|
||
|
return str.replace(/-([a-z])/g,
|
||
|
function (m, w) {
|
||
|
return w.toUpperCase();
|
||
|
});
|
||
|
}
|