From 9ab6587d6a879e9c475d8c5444df223e6878e333 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rokas=20Brazd=C5=BEionis?= Date: Thu, 28 Jul 2016 16:55:44 +0300 Subject: [PATCH] feat: implement --base-href argument Implement --base-href argument for build and serve commands Closes #1064 --- addon/ng2/commands/build.ts | 10 +++++++--- addon/ng2/commands/serve.ts | 5 ++++- addon/ng2/models/webpack-build-common.ts | 6 +++++- addon/ng2/models/webpack-config.ts | 4 ++-- addon/ng2/tasks/build-webpack-watch.ts | 2 +- addon/ng2/tasks/build-webpack.ts | 4 ++-- addon/ng2/tasks/serve-webpack.ts | 2 +- package.json | 1 + 8 files changed, 23 insertions(+), 11 deletions(-) diff --git a/addon/ng2/commands/build.ts b/addon/ng2/commands/build.ts index 935102fa8484..fdb1c9935bed 100644 --- a/addon/ng2/commands/build.ts +++ b/addon/ng2/commands/build.ts @@ -9,6 +9,7 @@ interface BuildOptions { watch?: boolean; watcher?: string; supressSizes: boolean; + baseHref?: string; } module.exports = Command.extend({ @@ -22,7 +23,8 @@ module.exports = Command.extend({ { name: 'output-path', type: 'Path', default: 'dist/', aliases: ['o'] }, { name: 'watch', type: Boolean, default: false, aliases: ['w'] }, { name: 'watcher', type: String }, - { name: 'suppress-sizes', type: Boolean, default: false } + { name: 'suppress-sizes', type: Boolean, default: false }, + { name: 'base-href', type: String, default: null }, ], run: function (commandOptions: BuildOptions) { @@ -32,7 +34,7 @@ module.exports = Command.extend({ } if (commandOptions.target === 'production') { commandOptions.environment = 'prod'; - } + } } var project = this.project; @@ -43,7 +45,8 @@ module.exports = Command.extend({ ui: ui, outputPath: commandOptions.outputPath, target: commandOptions.target, - environment: commandOptions.environment + environment: commandOptions.environment, + baseHref: commandOptions.baseHref }) : new WebpackBuild({ cliProject: project, @@ -51,6 +54,7 @@ module.exports = Command.extend({ outputPath: commandOptions.outputPath, target: commandOptions.target, environment: commandOptions.environment, + baseHref: commandOptions.baseHref }); return buildTask.run(commandOptions); diff --git a/addon/ng2/commands/serve.ts b/addon/ng2/commands/serve.ts index 7e048aff2a39..7ea94b23e3f9 100644 --- a/addon/ng2/commands/serve.ts +++ b/addon/ng2/commands/serve.ts @@ -28,6 +28,7 @@ export interface ServeTaskOptions { ssl?: boolean; sslKey?: string; sslCert?: string; + baseHref?: string; } module.exports = Command.extend({ @@ -51,7 +52,8 @@ module.exports = Command.extend({ { name: 'output-path', type: 'Path', default: 'dist/', aliases: ['op', 'out'] }, { name: 'ssl', type: Boolean, default: false }, { name: 'ssl-key', type: String, default: 'ssl/server.key' }, - { name: 'ssl-cert', type: String, default: 'ssl/server.crt' } + { name: 'ssl-cert', type: String, default: 'ssl/server.crt' }, + { name: 'base-href', type: String, default: null }, ], run: function(commandOptions: ServeTaskOptions) { @@ -85,6 +87,7 @@ module.exports = Command.extend({ ui: this.ui, analytics: this.analytics, project: this.project, + baseHref: commandOptions.baseHref }); return serve.run(commandOptions); diff --git a/addon/ng2/models/webpack-build-common.ts b/addon/ng2/models/webpack-build-common.ts index edb412f710b1..bfc2ced35ee5 100644 --- a/addon/ng2/models/webpack-build-common.ts +++ b/addon/ng2/models/webpack-build-common.ts @@ -1,11 +1,12 @@ import * as path from 'path'; import * as CopyWebpackPlugin from 'copy-webpack-plugin'; import * as HtmlWebpackPlugin from 'html-webpack-plugin'; +import { BaseHrefWebpackPlugin } from 'base-href-webpack-plugin'; import * as webpack from 'webpack'; import { ForkCheckerPlugin } from 'awesome-typescript-loader'; import { CliConfig } from './config'; -export function getWebpackCommonConfig(projectRoot: string, sourceDir: string) { +export function getWebpackCommonConfig(projectRoot: string, sourceDir: string, baseHref: string) { return { devtool: 'inline-source-map', resolve: { @@ -64,6 +65,9 @@ export function getWebpackCommonConfig(projectRoot: string, sourceDir: string) { template: path.resolve(projectRoot, `./${sourceDir}/index.html`), chunksSortMode: 'dependency' }), + new BaseHrefWebpackPlugin({ + baseHref: baseHref + }), new webpack.optimize.CommonsChunkPlugin({ name: ['polyfills'] }), diff --git a/addon/ng2/models/webpack-config.ts b/addon/ng2/models/webpack-config.ts index a215217c0afa..8aa148b8dd83 100644 --- a/addon/ng2/models/webpack-config.ts +++ b/addon/ng2/models/webpack-config.ts @@ -23,12 +23,12 @@ export class NgCliWebpackConfig { private webpackMobileConfigPartial: any; private webpackMobileProdConfigPartial: any; - constructor(public ngCliProject: any, public target: string, public environment: string) { + constructor(public ngCliProject: any, public target: string, public environment: string, public baseHref: string) { const sourceDir = CliConfig.fromProject().defaults.sourceDir; const environmentPath = `./${sourceDir}/app/environments/environment.${environment}.ts`; - this.webpackBaseConfig = getWebpackCommonConfig(this.ngCliProject.root, sourceDir); + this.webpackBaseConfig = getWebpackCommonConfig(this.ngCliProject.root, sourceDir, baseHref); this.webpackDevConfigPartial = getWebpackDevConfigPartial(this.ngCliProject.root, sourceDir); this.webpackProdConfigPartial = getWebpackProdConfigPartial(this.ngCliProject.root, sourceDir); diff --git a/addon/ng2/tasks/build-webpack-watch.ts b/addon/ng2/tasks/build-webpack-watch.ts index 7e6514c6513f..e0144395d80b 100644 --- a/addon/ng2/tasks/build-webpack-watch.ts +++ b/addon/ng2/tasks/build-webpack-watch.ts @@ -16,7 +16,7 @@ module.exports = Task.extend({ rimraf.sync(path.resolve(project.root, runTaskOptions.outputPath)); - const config = new NgCliWebpackConfig(project, runTaskOptions.target, runTaskOptions.environment).config; + const config = new NgCliWebpackConfig(project, runTaskOptions.target, runTaskOptions.environment, runTaskOptions.baseHref).config; const webpackCompiler = webpack(config); webpackCompiler.apply(new ProgressPlugin({ diff --git a/addon/ng2/tasks/build-webpack.ts b/addon/ng2/tasks/build-webpack.ts index 8d98d76a6812..aef91f480d31 100644 --- a/addon/ng2/tasks/build-webpack.ts +++ b/addon/ng2/tasks/build-webpack.ts @@ -11,12 +11,12 @@ let lastHash: any = null; module.exports = Task.extend({ // Options: String outputPath - run: function(runTaskOptions: ServeTaskOptions) { + run: function (runTaskOptions: ServeTaskOptions) { var project = this.cliProject; rimraf.sync(path.resolve(project.root, runTaskOptions.outputPath)); - var config = new NgCliWebpackConfig(project, runTaskOptions.target, runTaskOptions.environment).config; + var config = new NgCliWebpackConfig(project, runTaskOptions.target, runTaskOptions.environment, runTaskOptions.baseHref).config; const webpackCompiler = webpack(config); const ProgressPlugin = require('webpack/lib/ProgressPlugin'); diff --git a/addon/ng2/tasks/serve-webpack.ts b/addon/ng2/tasks/serve-webpack.ts index 60589e48c011..a798e4773fc6 100644 --- a/addon/ng2/tasks/serve-webpack.ts +++ b/addon/ng2/tasks/serve-webpack.ts @@ -15,7 +15,7 @@ module.exports = Task.extend({ let lastHash = null; let webpackCompiler: any; - var config: NgCliWebpackConfig = new NgCliWebpackConfig(this.project, commandOptions.target, commandOptions.environment).config; + var config: NgCliWebpackConfig = new NgCliWebpackConfig(this.project, commandOptions.target, commandOptions.environment, commandOptions.baseHref).config; // This allows for live reload of page when changes are made to repo. // https://webpack.github.io/docs/webpack-dev-server.html#inline-mode config.entry.main.unshift(`webpack-dev-server/client?http://${commandOptions.host}:${commandOptions.port}/`); diff --git a/package.json b/package.json index a328abfea19f..69f89285f051 100644 --- a/package.json +++ b/package.json @@ -37,6 +37,7 @@ "@types/webpack": "^1.12.22-alpha", "angular2-template-loader": "^0.4.0", "awesome-typescript-loader": "^2.1.1", + "base-href-webpack-plugin": "^1.0.0", "chalk": "^1.1.3", "compression-webpack-plugin": "^0.3.1", "copy-webpack-plugin": "^3.0.1",