Skip to content
This repository was archived by the owner on May 1, 2020. It is now read-only.

Commit 4b7338e

Browse files
committed
chore(bundle): add version info to window.Ionic
1 parent f7a7895 commit 4b7338e

File tree

5 files changed

+83
-30
lines changed

5 files changed

+83
-30
lines changed

src/dev-server/injector.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { getAppScriptsVersion, getSystemInfo } from '../util/helpers';
1+
import { getAppScriptsVersion, getSystemText } from '../util/helpers';
22
import { LOGGER_DIR } from './serve-config';
33

44

@@ -32,7 +32,7 @@ function getDevLoggerScript(rootDir: string, notifyOnConsoleLog: boolean, notifi
3232
sendConsoleLogs: notifyOnConsoleLog,
3333
wsPort: notificationPort,
3434
appScriptsVersion: appScriptsVersion,
35-
systemInfo: getSystemInfo(rootDir)
35+
systemInfo: getSystemText(rootDir)
3636
});
3737

3838
return `

src/postprocess.ts

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
import { Logger } from './logger/logger';
2+
import { getSystemData, readFileAsync, writeFileAsync } from './util/helpers';
23
import { BuildContext } from './util/interfaces';
34
import { purgeSourceMapsIfNeeded } from './util/source-maps';
45
import { removeUnusedFonts } from './optimization/remove-unused-fonts';
6+
import * as path from 'path';
57

68

79
export function postprocess(context: BuildContext) {
@@ -17,7 +19,46 @@ export function postprocess(context: BuildContext) {
1719

1820
function postprocessWorker(context: BuildContext) {
1921
return Promise.all([
22+
addIonicGlobal(context),
2023
purgeSourceMapsIfNeeded(context),
2124
removeUnusedFonts(context)
2225
]);
2326
}
27+
28+
29+
function addIonicGlobal(context: BuildContext) {
30+
const outputFilePath = path.join(context.buildDir, context.outputJsFileName);
31+
32+
return readFileAsync(outputFilePath).then(outputContent => {
33+
const ionicGlobal = buildIonicGlobal(context);
34+
35+
if (outputContent.indexOf(ionicGlobal) === -1) {
36+
outputContent += ionicGlobal;
37+
return writeFileAsync(outputFilePath, outputContent);
38+
}
39+
});
40+
}
41+
42+
43+
function buildIonicGlobal(context: BuildContext) {
44+
if ((<any>context).windowIonic) {
45+
// just a quick way to cache this to avoid unnecessary readFiles
46+
return (<any>context).windowIonic;
47+
}
48+
49+
const systemData = getSystemData(context.rootDir);
50+
51+
let output = `
52+
(function(w){
53+
var i = w.Ionic = w.Ionic || {};
54+
${systemData.ionicFramework ? `i.version = '${systemData.ionicFramework}';` : ''}
55+
${systemData.angularCore ? `i.angular = '${systemData.angularCore}';` : ''}
56+
${systemData.ionicNative ? `i.ionicNative = '${systemData.ionicNative}';` : ''}
57+
})(window);`;
58+
59+
// real quick minification hack
60+
output = output.replace(/\s/g, '');
61+
output = output.replace('vari=', 'var i=');
62+
63+
return (<any>context).windowIonic = `\n\n${output}`;
64+
}

src/util/config.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -175,13 +175,13 @@ export function generateContext(context?: BuildContext): BuildContext {
175175
setProcessEnvVar(Constants.ENV_CLOSURE_JAR, closureCompilerJarPath);
176176
Logger.debug(`closureCompilerJarPath set to ${closureCompilerJarPath}`);
177177

178-
const outputJsFileName = getConfigValue(context, '--outputJsFileName', null, Constants.ENV_OUTPUT_JS_FILE_NAME, Constants.ENV_OUTPUT_JS_FILE_NAME.toLowerCase(), 'main.js');
179-
setProcessEnvVar(Constants.ENV_OUTPUT_JS_FILE_NAME, outputJsFileName);
180-
Logger.debug(`outputJsFileName set to ${outputJsFileName}`);
178+
context.outputJsFileName = getConfigValue(context, '--outputJsFileName', null, Constants.ENV_OUTPUT_JS_FILE_NAME, Constants.ENV_OUTPUT_JS_FILE_NAME.toLowerCase(), 'main.js');
179+
setProcessEnvVar(Constants.ENV_OUTPUT_JS_FILE_NAME, context.outputJsFileName);
180+
Logger.debug(`outputJsFileName set to ${context.outputJsFileName}`);
181181

182-
const outputCssFileName = getConfigValue(context, '--outputCssFileName', null, Constants.ENV_OUTPUT_CSS_FILE_NAME, Constants.ENV_OUTPUT_CSS_FILE_NAME.toLowerCase(), 'main.css');
183-
setProcessEnvVar(Constants.ENV_OUTPUT_CSS_FILE_NAME, outputCssFileName);
184-
Logger.debug(`outputCssFileName set to ${outputCssFileName}`);
182+
context.outputCssFileName = getConfigValue(context, '--outputCssFileName', null, Constants.ENV_OUTPUT_CSS_FILE_NAME, Constants.ENV_OUTPUT_CSS_FILE_NAME.toLowerCase(), 'main.css');
183+
setProcessEnvVar(Constants.ENV_OUTPUT_CSS_FILE_NAME, context.outputCssFileName);
184+
Logger.debug(`outputCssFileName set to ${context.outputCssFileName}`);
185185

186186
const webpackFactoryPath = join(getProcessEnvVar(Constants.ENV_VAR_APP_SCRIPTS_DIR), 'dist', 'webpack', 'ionic-webpack-factory.js');
187187
setProcessEnvVar(Constants.ENV_WEBPACK_FACTORY, webpackFactoryPath);

src/util/helpers.ts

Lines changed: 32 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ export function getAppScriptsPackageJson() {
2424
return cachedAppScriptsPackageJson;
2525
}
2626

27-
export function getAppScriptsVersion() {
27+
export function getAppScriptsVersion(): string {
2828
const appScriptsPackageJson = getAppScriptsPackageJson();
2929
return (appScriptsPackageJson && appScriptsPackageJson.version) ? appScriptsPackageJson.version : '';
3030
}
@@ -36,38 +36,48 @@ function getUserPackageJson(userRootDir: string) {
3636
return null;
3737
}
3838

39-
export function getSystemInfo(userRootDir: string) {
39+
export function getSystemText(userRootDir: string) {
40+
const systemData = getSystemData(userRootDir);
4041
const d: string[] = [];
4142

42-
let ionicAppScripts = getAppScriptsVersion();
43-
let ionicFramework: string = null;
44-
let ionicNative: string = null;
45-
let angularCore: string = null;
46-
let angularCompilerCli: string = null;
43+
d.push(`Ionic Framework: ${systemData.ionicFramework}`);
44+
if (systemData.ionicNative) {
45+
d.push(`Ionic Native: ${systemData.ionicNative}`);
46+
}
47+
d.push(`Ionic App Scripts: ${systemData.ionicAppScripts}`);
48+
d.push(`Angular Core: ${systemData.angularCore}`);
49+
d.push(`Angular Compiler CLI: ${systemData.angularCompilerCli}`);
50+
d.push(`Node: ${systemData.node}`);
51+
d.push(`OS Platform: ${systemData.osName}`);
52+
53+
return d;
54+
}
55+
56+
57+
export function getSystemData(userRootDir: string) {
58+
const d = {
59+
ionicAppScripts: getAppScriptsVersion(),
60+
ionicFramework: '',
61+
ionicNative: '',
62+
angularCore: '',
63+
angularCompilerCli: '',
64+
node: process.version.replace('v', ''),
65+
osName: osName()
66+
};
4767

4868
try {
4969
const userPackageJson = getUserPackageJson(userRootDir);
5070
if (userPackageJson) {
5171
const userDependencies = userPackageJson.dependencies;
5272
if (userDependencies) {
53-
ionicFramework = userDependencies['ionic-angular'];
54-
ionicNative = userDependencies['ionic-native'];
55-
angularCore = userDependencies['@angular/core'];
56-
angularCompilerCli = userDependencies['@angular/compiler-cli'];
73+
d.ionicFramework = userDependencies['ionic-angular'];
74+
d.ionicNative = userDependencies['ionic-native'];
75+
d.angularCore = userDependencies['@angular/core'];
76+
d.angularCompilerCli = userDependencies['@angular/compiler-cli'];
5777
}
5878
}
5979
} catch (e) {}
6080

61-
d.push(`Ionic Framework: ${ionicFramework}`);
62-
if (ionicNative) {
63-
d.push(`Ionic Native: ${ionicNative}`);
64-
}
65-
d.push(`Ionic App Scripts: ${ionicAppScripts}`);
66-
d.push(`Angular Core: ${angularCore}`);
67-
d.push(`Angular Compiler CLI: ${angularCompilerCli}`);
68-
d.push(`Node: ${process.version.replace('v', '')}`);
69-
d.push(`OS Platform: ${osName()}`);
70-
7181
return d;
7282
}
7383

@@ -135,7 +145,7 @@ export function readAndCacheFile(filePath: string, purge: boolean = false): Prom
135145
});
136146
}
137147

138-
export function unlinkAsync(filePath: string|string[]) {
148+
export function unlinkAsync(filePath: string|string[]): Promise<any> {
139149
let filePaths: string[];
140150

141151
if (typeof filePath === 'string') {

src/util/interfaces.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ export interface BuildContext {
1717
wwwDir?: string;
1818
wwwIndex?: string;
1919
buildDir?: string;
20+
outputJsFileName?: string;
21+
outputCssFileName?: string;
2022
nodeModulesDir?: string;
2123
ionicAngularDir?: string;
2224
moduleFiles?: string[];

0 commit comments

Comments
 (0)