94 lines
2.6 KiB
JavaScript
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);
|
|
}
|
|
}
|