Skip to content

Commit 040ca4c

Browse files
committed
add alias option to angular-cli.json and use it for resolve paths in webpack
1 parent 5431abc commit 040ca4c

File tree

7 files changed

+51
-3
lines changed

7 files changed

+51
-3
lines changed

packages/angular-cli/blueprints/ng2/files/__path__/tsconfig.json

+9-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,14 @@
1212
"target": "es5",
1313
"typeRoots": [
1414
"../node_modules/@types"
15-
]
15+
],
16+
"paths": {
17+
"@app": [
18+
"app"
19+
],
20+
"@app/*": [
21+
"app/*"
22+
]
23+
}
1624
}
1725
}

packages/angular-cli/blueprints/ng2/files/angular-cli.json

+3
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@
2222
"source": "environments/environment.ts",
2323
"dev": "environments/environment.ts",
2424
"prod": "environments/environment.prod.ts"
25+
},
26+
"alias": {
27+
"@app": "app"
2528
}
2629
}
2730
],

packages/angular-cli/lib/config/schema.d.ts

+6
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,12 @@ export interface CliConfig {
3333
environments?: {
3434
[name: string]: any;
3535
};
36+
/**
37+
* Name and corresponding path.
38+
*/
39+
alias?: {
40+
[name: string]: string;
41+
};
3642
}[];
3743
/**
3844
* Configuration reserved for installed third party addons.

packages/angular-cli/lib/config/schema.json

+5
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,11 @@
7373
"description": "Name and corresponding file for environment config.",
7474
"type": "object",
7575
"additionalProperties": true
76+
},
77+
"alias": {
78+
"description": "Aliases for resolve imports in webpack",
79+
"type": "object",
80+
"additionalProperties": true
7681
}
7782
},
7883
"additionalProperties": false
+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import * as path from 'path';
2+
3+
export function getAliases(
4+
projectRoot: string,
5+
appConfig: any
6+
) {
7+
const aliases: any = {};
8+
9+
const appRoot = path.resolve(projectRoot, appConfig.root);
10+
11+
if (appConfig.alias) {
12+
for (let aliasKey in appConfig.alias) {
13+
let alias = path.resolve(appRoot, appConfig.alias[aliasKey]);
14+
aliases[aliasKey] = alias;
15+
}
16+
}
17+
18+
return aliases;
19+
}

packages/angular-cli/models/webpack-build-common.ts

+5-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ import * as webpack from 'webpack';
22
import * as path from 'path';
33
import {BaseHrefWebpackPlugin} from '@angular-cli/base-href-webpack';
44

5+
import { getAliases } from './get-aliases';
6+
57
const CopyWebpackPlugin = require('copy-webpack-plugin');
68
const HtmlWebpackPlugin = require('html-webpack-plugin');
79

@@ -21,6 +23,7 @@ export function getWebpackCommonConfig(
2123
const scripts = appConfig.scripts
2224
? appConfig.scripts.map((script: string) => path.resolve(appRoot, script))
2325
: [];
26+
const aliases = getAliases(projectRoot, appConfig);
2427

2528
let entry: { [key: string]: string[] } = {
2629
main: [appMain]
@@ -33,7 +36,8 @@ export function getWebpackCommonConfig(
3336
return {
3437
devtool: 'source-map',
3538
resolve: {
36-
extensions: ['.ts', '.js']
39+
extensions: ['.ts', '.js'],
40+
alias: aliases
3741
},
3842
context: path.resolve(__dirname, './'),
3943
entry: entry,

packages/angular-cli/models/webpack-build-test.js

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,20 @@
11
// this config must be JS so that the karma plugin can load it
2+
const getAliases = require('./get-aliases');
23

34
const path = require('path');
45
const webpack = require('webpack');
56

67
const getWebpackTestConfig = function (projectRoot, environment, appConfig) {
78

89
const appRoot = path.resolve(projectRoot, appConfig.root);
10+
const aliases = getAliases(projectRoot, appConfig);
911

1012
return {
1113
devtool: 'inline-source-map',
1214
context: path.resolve(__dirname, './'),
1315
resolve: {
14-
extensions: ['.ts', '.js']
16+
extensions: ['.ts', '.js'],
17+
alias: aliases
1518
},
1619
entry: {
1720
test: path.resolve(appRoot, appConfig.test)

0 commit comments

Comments
 (0)