Files
spring-flo/integration/build.js
2017-08-22 11:49:47 -04:00

94 lines
2.6 KiB
JavaScript

const fs = require('fs');
const path = require('path');
const glob = require('glob');
const rollup = require('rollup');
const uglify = require('rollup-plugin-uglify');
const commonjs = require('rollup-plugin-commonjs');
const nodeResolve = require('rollup-plugin-node-resolve');
const ngc = require('@angular/compiler-cli/src/main').main;
const srcDir = path.join(__dirname, 'src/');
const distDir = path.join(__dirname, 'dist/');
const aotDir = path.join(__dirname, 'aot/');
const rollupConfig = {
entry: `${srcDir}/main-aot.js`,
sourceMap: false,
format: 'iife',
onwarn: function (warning) {
// Skip certain warnings
if (warning.code === 'THIS_IS_UNDEFINED') { return; }
// console.warn everything else
console.warn(warning.message);
},
plugins: [
nodeResolve({ jsnext: true, module: true }),
commonjs({
include: ['node_modules/rxjs/**']
}),
uglify()
]
};
return Promise.resolve()
// Compile using ngc.
.then(() => ngc({ project: `./tsconfig.aot.json` }))
// Create dist dir.
.then(() => _recursiveMkDir(distDir))
// Copy files.
.then(() => {
// Copy and rename index-aot.html.
fs.createReadStream(path.join(srcDir, 'index-aot.html'))
.pipe(fs.createWriteStream(path.join(distDir, 'index.html')));
// Copy global stylesheets, images, etc.
const assets = [
'favicon.ico',
'styles.css'
];
return Promise.all(assets.map(asset => _relativeCopy(asset, srcDir, distDir)));
})
// Bundle app.
.then(() => rollup.rollup(rollupConfig))
// Concatenate app and scripts.
.then(bundle => {
const appBundle = bundle.generate(rollupConfig);
const scripts = [
'node_modules/core-js/client/shim.min.js',
'node_modules/zone.js/dist/zone.min.js'
];
let concatenatedScripts = scripts.map((script) => {
return fs.readFileSync(path.join(__dirname, script)).toString();
}).join('\n;');
concatenatedScripts = concatenatedScripts.concat('\n;', appBundle.code);
fs.writeFileSync(path.join(distDir, 'bundle.js'), concatenatedScripts);
});
// Copy files maintaining relative paths.
function _relativeCopy(fileGlob, from, to) {
return glob(fileGlob, { cwd: from, nodir: true }, (err, files) => {
if (err) throw err;
files.forEach(file => {
const origin = path.join(from, file);
const dest = path.join(to, file);
_recursiveMkDir(path.dirname(dest));
fs.createReadStream(origin).pipe(fs.createWriteStream(dest));
})
})
}
// Recursively create a dir.
function _recursiveMkDir(dir) {
if (!fs.existsSync(dir)) {
_recursiveMkDir(path.dirname(dir));
fs.mkdirSync(dir);
}
}