annotate build-prod.js @ 362:bcb0a172eca3

Populate item with features when extracted. This should be moved to happen in a subscription.
author Lucas Thompson <dev@lucas.im>
date Tue, 30 May 2017 15:08:15 +0100
parents efa231b10580
children 7005b0d11509
rev   line source
dev@138 1 /**
dev@138 2 * Created by lucas on 20/03/2017.
dev@138 3 */
dev@138 4 'use strict';
dev@138 5 const webpack = require('webpack');
dev@138 6 const cli = require('@angular/cli');
dev@138 7 const fs = require('fs');
dev@138 8 webpack.optimize = Object.assign({}, webpack.optimize, {
dev@138 9 UglifyJsPlugin: function () { this.apply = () => {}; }
dev@138 10 });
dev@138 11
dev@138 12 const bundlePrefixes = [
dev@138 13 'main',
dev@138 14 'polyfills',
dev@138 15 'scripts',
dev@138 16 'styles',
dev@138 17 'vendor',
dev@138 18 'inline'
dev@138 19 ];
dev@138 20
dev@138 21 const distDir = './dist';
dev@138 22 const tmpDir = `${distDir}/gh-pages`;
dev@138 23
dev@138 24 const getGeneratedBundleNames = () => {
dev@138 25 return new Promise((res, rej) => {
dev@138 26 fs.readdir(distDir, (err, files) => {
dev@138 27 if (err) {
dev@138 28 rej(1);
dev@138 29 } else {
dev@138 30 res(files.filter(file => bundlePrefixes.find(
dev@138 31 prefix => file.startsWith(prefix)
dev@138 32 )));
dev@138 33 }
dev@138 34 })
dev@138 35 });
dev@138 36 };
dev@138 37
dev@138 38 const throwIfBuildReportedError = (result) => {
dev@138 39 return new Promise((res, rej) => {
dev@138 40 if (typeof result === 'object' && result.exitCode != null) {
dev@138 41 if (result.exitCode === 0) {
dev@138 42 res();
dev@138 43 } else {
dev@138 44 rej(result.exitCode);
dev@138 45 }
dev@138 46 } else if(typeof result === 'number') {
dev@138 47 if (result === 0) {
dev@138 48 res();
dev@138 49 } else {
dev@138 50 rej(result);
dev@138 51 }
dev@138 52 } else {
dev@138 53 res();
dev@138 54 }
dev@138 55 });
dev@138 56 };
dev@138 57
dev@138 58 const copyToTmpDir = (bundles) => {
dev@138 59 // TODO should really handle errors for all of this
dev@138 60 // and it could be async but i'm too lazy & it doesn't really matter for this
dev@138 61 if (!fs.existsSync(tmpDir)){
dev@138 62 fs.mkdirSync(tmpDir);
dev@138 63 }
dev@138 64 for (let bundle of bundles) {
dev@138 65 const parts = bundle.split('.');
dev@138 66 const bundlePrefix = parts[0];
dev@138 67 const bundleExtension = parts[parts.length - 1];
dev@138 68 const contents = fs.readFileSync(`${distDir}/${bundle}`);
dev@138 69 fs.writeFileSync(
dev@138 70 `${tmpDir}/${bundlePrefix}.bundle.${bundleExtension}`,
dev@138 71 contents
dev@138 72 );
dev@138 73 }
dev@138 74 };
dev@138 75
dev@138 76 cli({
dev@138 77 cliArgs: ['build', '--prod', '--aot', 'false', '-bh', '/ugly-duckling/'],
dev@138 78 inputStream: process.stdin,
dev@138 79 outputStream: process.stdout
dev@138 80 })
dev@138 81 .then(throwIfBuildReportedError)
dev@138 82 .then(getGeneratedBundleNames)
dev@138 83 .then(copyToTmpDir)
dev@138 84 .then(process.exit)
dev@138 85 .catch(process.exit);