Skip to content

Commit 9f07968

Browse files
committed
fix(@angular/cli): allow build output in outDir outside of project
1 parent c60e8af commit 9f07968

File tree

2 files changed

+20
-4
lines changed

2 files changed

+20
-4
lines changed

packages/@angular/cli/models/webpack-configs/common.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -99,11 +99,12 @@ export function getCommonConfig(wco: WebpackConfigOptions) {
9999
// specify a configuration flag.
100100
// Also prevent writing outside the project path. That is not overridable.
101101
const fullOutputPath = path.resolve(buildOptions.outputPath, asset.output);
102-
if (!fullOutputPath.startsWith(projectRoot)) {
103-
const message = 'An asset cannot be written to a location outside the project.';
104-
throw new SilentError(message);
105-
}
106102
if (!fullOutputPath.startsWith(path.resolve(buildOptions.outputPath))) {
103+
if (!fullOutputPath.startsWith(projectRoot)) {
104+
const message = 'An asset cannot be written to a location outside the project.';
105+
throw new SilentError(message);
106+
}
107+
107108
if (!asset.allowOutsideOutDir) {
108109
const message = 'An asset cannot be written to a location outside of the output path. '
109110
+ 'You can override this message by setting the `allowOutsideOutDir` '

tests/e2e/tests/build/assets.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,21 @@ export default function () {
5555
}))
5656
.then(() => expectToFail(() => ng('build')))
5757

58+
// This asset will not fail with the exception above.
59+
.then(() => updateJsonFile('.angular-cli.json', configJson => {
60+
const app = configJson['apps'][0];
61+
app['outDir'] = '../../temp';
62+
app['assets'] = [
63+
{ 'glob': '**/*', 'input': '../node_modules/some-package/', 'output': '../../temp',
64+
'allowOutsideOutDir': true }
65+
];
66+
}))
67+
.then(() => ng('build'))
68+
.then(() => updateJsonFile('.angular-cli.json', configJson => {
69+
const app = configJson['apps'][0];
70+
app['outDir'] = 'dist';
71+
})
72+
5873
// This asset should also fail from reading from outside the project.
5974
.then(() => updateJsonFile('.angular-cli.json', configJson => {
6075
const app = configJson['apps'][0];

0 commit comments

Comments
 (0)