Skip to content

Commit c58c5b3

Browse files
not-only-codeTheLarkInn
authored andcommitted
This should fix the missing option '--output-path' on webpack. (#1627)
* Added ability to specify output path for bundles and assets with `ng build` commands. * Command is specified by using the `--output-path` flag.
1 parent fa7a927 commit c58c5b3

9 files changed

+39
-19
lines changed

addon/ng2/models/webpack-build-common.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,10 @@ import * as webpack from 'webpack';
55
import { ForkCheckerPlugin } from 'awesome-typescript-loader';
66
import { CliConfig } from './config';
77

8-
export function getWebpackCommonConfig(projectRoot: string, sourceDir: string) {
8+
export function getWebpackCommonConfig(projectRoot: string, sourceDir: string, outputDir: string) {
9+
10+
let outputPath: string = path.resolve(projectRoot, outputDir);
11+
912
return {
1013
devtool: 'source-map',
1114
resolve: {
@@ -18,7 +21,7 @@ export function getWebpackCommonConfig(projectRoot: string, sourceDir: string) {
1821
polyfills: path.resolve(projectRoot, `./${sourceDir}/polyfills.ts`)
1922
},
2023
output: {
21-
path: path.resolve(projectRoot, './dist'),
24+
path: outputPath,
2225
filename: '[name].bundle.js'
2326
},
2427
module: {
@@ -66,7 +69,7 @@ export function getWebpackCommonConfig(projectRoot: string, sourceDir: string) {
6669
new CopyWebpackPlugin([{
6770
context: path.resolve(projectRoot, './public'),
6871
from: '**/*',
69-
to: path.resolve(projectRoot, './dist')
72+
to: outputPath
7073
}])
7174
],
7275
node: {

addon/ng2/models/webpack-build-development.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
import { CliConfig } from './config';
22
const path = require('path')
33

4-
export const getWebpackDevConfigPartial = function(projectRoot: string, sourceDir: string) {
4+
export const getWebpackDevConfigPartial = function(projectRoot: string, sourceDir: string, outputDir: string) {
5+
56
return {
67
debug: true,
78
devtool: 'source-map',
89
output: {
9-
path: path.resolve(projectRoot, './dist'),
10+
path: path.resolve(projectRoot, outputDir),
1011
filename: '[name].bundle.js',
1112
sourceMapFilename: '[name].map',
1213
chunkFilename: '[id].chunk.js'

addon/ng2/models/webpack-build-mobile.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,13 @@ import * as CopyWebpackPlugin from 'copy-webpack-plugin';
55
import { PrerenderWebpackPlugin } from '../utilities/prerender-webpack-plugin.ts';
66
import { CliConfig } from './config';
77

8-
export const getWebpackMobileConfigPartial = function (projectRoot: string, sourceDir: string) {
8+
export const getWebpackMobileConfigPartial = function (projectRoot: string, sourceDir: string, outputDir: string) {
9+
let outputPath: string = path.resolve(projectRoot, outputDir);
910
return {
1011
plugins: [
1112
new CopyWebpackPlugin([
12-
{from: path.resolve(projectRoot, `./${sourceDir}/icons`), to: path.resolve(projectRoot, './dist/icons')},
13-
{from: path.resolve(projectRoot, `./${sourceDir}/manifest.webapp`), to: path.resolve(projectRoot, './dist')}
13+
{from: path.resolve(projectRoot, `./${sourceDir}/icons`), to: path.resolve(outputPath, './icons')},
14+
{from: path.resolve(projectRoot, `./${sourceDir}/manifest.webapp`), to: outputPath}
1415
]),
1516
new PrerenderWebpackPlugin({
1617
templatePath: 'index.html',

addon/ng2/models/webpack-build-production.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,13 @@ import * as CompressionPlugin from 'compression-webpack-plugin';
55
import * as webpack from 'webpack';
66
import { CliConfig } from './config';
77

8-
export const getWebpackProdConfigPartial = function(projectRoot: string, sourceDir: string) {
8+
export const getWebpackProdConfigPartial = function(projectRoot: string, sourceDir: string, outputDir: string) {
9+
910
return {
1011
debug: false,
1112
devtool: 'source-map',
1213
output: {
13-
path: path.resolve(projectRoot, './dist'),
14+
path: path.resolve(projectRoot, outputDir),
1415
filename: '[name].[chunkhash].bundle.js',
1516
sourceMapFilename: '[name].[chunkhash].bundle.map',
1617
chunkFilename: '[id].[chunkhash].chunk.js'

addon/ng2/models/webpack-config.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,17 @@ export class NgCliWebpackConfig {
2323
private webpackMobileConfigPartial: any;
2424
private webpackMobileProdConfigPartial: any;
2525

26-
constructor(public ngCliProject: any, public target: string, public environment: string) {
26+
constructor(public ngCliProject: any, public target: string, public environment: string, outputDir: string) {
2727
const sourceDir = CliConfig.fromProject().defaults.sourceDir;
2828

2929
const environmentPath = `./${sourceDir}/app/environments/environment.${environment}.ts`;
3030

31-
this.webpackBaseConfig = getWebpackCommonConfig(this.ngCliProject.root, sourceDir);
32-
this.webpackDevConfigPartial = getWebpackDevConfigPartial(this.ngCliProject.root, sourceDir);
33-
this.webpackProdConfigPartial = getWebpackProdConfigPartial(this.ngCliProject.root, sourceDir);
31+
this.webpackBaseConfig = getWebpackCommonConfig(this.ngCliProject.root, sourceDir, outputDir);
32+
this.webpackDevConfigPartial = getWebpackDevConfigPartial(this.ngCliProject.root, sourceDir, outputDir);
33+
this.webpackProdConfigPartial = getWebpackProdConfigPartial(this.ngCliProject.root, sourceDir, outputDir);
3434

3535
if (CliConfig.fromProject().apps[0].mobile){
36-
this.webpackMobileConfigPartial = getWebpackMobileConfigPartial(this.ngCliProject.root, sourceDir);
36+
this.webpackMobileConfigPartial = getWebpackMobileConfigPartial(this.ngCliProject.root, sourceDir, outputDir);
3737
this.webpackMobileProdConfigPartial = getWebpackMobileProdConfigPartial(this.ngCliProject.root, sourceDir);
3838
this.webpackBaseConfig = webpackMerge(this.webpackBaseConfig, this.webpackMobileConfigPartial);
3939
this.webpackProdConfigPartial = webpackMerge(this.webpackProdConfigPartial, this.webpackMobileProdConfigPartial);

addon/ng2/tasks/build-webpack-watch.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ module.exports = Task.extend({
1616

1717
rimraf.sync(path.resolve(project.root, runTaskOptions.outputPath));
1818

19-
const config = new NgCliWebpackConfig(project, runTaskOptions.target, runTaskOptions.environment).config;
19+
const config = new NgCliWebpackConfig(project, runTaskOptions.target, runTaskOptions.environment, runTaskOptions.outputPath).config;
2020
const webpackCompiler = webpack(config);
2121

2222
webpackCompiler.apply(new ProgressPlugin({

addon/ng2/tasks/build-webpack.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ module.exports = Task.extend({
1616
var project = this.cliProject;
1717

1818
rimraf.sync(path.resolve(project.root, runTaskOptions.outputPath));
19-
var config = new NgCliWebpackConfig(project, runTaskOptions.target, runTaskOptions.environment).config;
19+
var config = new NgCliWebpackConfig(project, runTaskOptions.target, runTaskOptions.environment, runTaskOptions.outputPath).config;
20+
2021
const webpackCompiler = webpack(config);
2122

2223
const ProgressPlugin = require('webpack/lib/ProgressPlugin');

addon/ng2/tasks/serve-webpack.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ module.exports = Task.extend({
1515
let lastHash = null;
1616
let webpackCompiler: any;
1717

18-
var config: NgCliWebpackConfig = new NgCliWebpackConfig(this.project, commandOptions.target, commandOptions.environment).config;
18+
var config: NgCliWebpackConfig = new NgCliWebpackConfig(this.project, commandOptions.target, commandOptions.environment, commandOptions.outputPath).config;
19+
1920
// This allows for live reload of page when changes are made to repo.
2021
// https://webpack.github.io/docs/webpack-dev-server.html#inline-mode
2122
config.entry.main.unshift(`webpack-dev-server/client?http://${commandOptions.host}:${commandOptions.port}/`);
@@ -27,7 +28,7 @@ module.exports = Task.extend({
2728
}));
2829

2930
const webpackDevServerConfiguration: IWebpackDevServerConfigurationOptions = {
30-
contentBase: path.resolve(this.project.root, `./${CliConfig.fromProject().defaults.sourceDir}`),
31+
contentBase: config.output.path,
3132
historyApiFallback: true,
3233
stats: webpackDevServerOutputOptions,
3334
inline: true

tests/e2e/e2e_workflow.spec.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,18 @@ describe('Basic end-to-end Workflow', function () {
144144
});
145145
});
146146

147+
it('Build pack output files into a different folder', function () {
148+
this.timeout(420000);
149+
150+
return ng(['build', '-o', './build-output'])
151+
.catch(() => {
152+
throw new Error('Build failed.');
153+
})
154+
.then(function () {
155+
expect(existsSync(path.join(process.cwd(), './build-output'))).to.be.equal(true);
156+
});
157+
});
158+
147159
it_mobile('Does not include mobile prod features', () => {
148160
let index = fs.readFileSync(path.join(process.cwd(), 'dist/index.html'), 'utf-8');
149161
// Service Worker

0 commit comments

Comments
 (0)