Skip to content

Commit 309b483

Browse files
Alanhansl
Alan
authored andcommitted
fix(@angular-devkit/build-angular): don't bundle linked modules when bundleDependencies in none in server builder
Fixes #13817
1 parent 643e83d commit 309b483

File tree

2 files changed

+71
-22
lines changed

2 files changed

+71
-22
lines changed

packages/angular_devkit/build_angular/src/angular-cli-files/models/webpack-configs/server.ts

+5-22
Original file line numberDiff line numberDiff line change
@@ -9,30 +9,21 @@ import { Configuration } from 'webpack';
99
import { WebpackConfigOptions } from '../build-options';
1010
import { getSourceMapDevTool } from './utils';
1111

12-
1312
/**
1413
* Returns a partial specific to creating a bundle for node
1514
* @param wco Options which are include the build options and app config
1615
*/
1716
export function getServerConfig(wco: WebpackConfigOptions) {
18-
1917
const extraPlugins = [];
2018
if (wco.buildOptions.sourceMap) {
2119
const { scripts, styles, hidden } = wco.buildOptions.sourceMap;
2220

23-
extraPlugins.push(getSourceMapDevTool(
24-
scripts || false,
25-
styles || false,
26-
hidden || false,
27-
));
21+
extraPlugins.push(getSourceMapDevTool(scripts || false, styles || false, hidden || false));
2822
}
2923

3024
const config: Configuration = {
3125
resolve: {
32-
mainFields: [
33-
...(wco.supportES2015 ? ['es2015'] : []),
34-
'main', 'module',
35-
],
26+
mainFields: [...(wco.supportES2015 ? ['es2015'] : []), 'main', 'module'],
3627
},
3728
target: 'node',
3829
output: {
@@ -45,23 +36,15 @@ export function getServerConfig(wco: WebpackConfigOptions) {
4536
if (wco.buildOptions.bundleDependencies == 'none') {
4637
config.externals = [
4738
/^@angular/,
48-
// tslint:disable-next-line:no-any
49-
(_: any, request: any, callback: (error?: any, result?: any) => void) => {
39+
(context: string, request: string, callback: (error?: null, result?: string) => void) => {
5040
// Absolute & Relative paths are not externals
5141
if (request.match(/^\.{0,2}\//)) {
5242
return callback();
5343
}
5444

5545
try {
56-
// Attempt to resolve the module via Node
57-
const e = require.resolve(request);
58-
if (/node_modules/.test(e)) {
59-
// It's a node_module
60-
callback(null, request);
61-
} else {
62-
// It's a system thing (.ie util, fs...)
63-
callback();
64-
}
46+
require.resolve(request);
47+
callback(null, request);
6548
} catch {
6649
// Node couldn't find it, so it must be user-aliased
6750
callback();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
import * as path from 'path';
2+
import {
3+
createDir,
4+
expectFileToMatch,
5+
rimraf,
6+
symlinkFile,
7+
writeMultipleFiles,
8+
} from '../../utils/fs';
9+
import { ng } from '../../utils/process';
10+
import { updateJsonFile } from '../../utils/project';
11+
12+
export default async function() {
13+
await updateJsonFile('angular.json', workspaceJson => {
14+
const appArchitect = workspaceJson.projects['test-project'].architect;
15+
appArchitect['server'] = {
16+
builder: '@angular-devkit/build-angular:server',
17+
options: {
18+
bundleDependencies: 'none',
19+
outputPath: 'dist/test-project-server',
20+
main: 'src/main.server.ts',
21+
tsConfig: 'tsconfig.server.json',
22+
},
23+
};
24+
});
25+
26+
await createDir('./dummy-lib');
27+
28+
await writeMultipleFiles({
29+
'./tsconfig.server.json': `
30+
{
31+
"extends": "./tsconfig.json",
32+
"compilerOptions": {
33+
"outDir": "../dist-server",
34+
"baseUrl": "./",
35+
"module": "commonjs",
36+
"types": []
37+
},
38+
"include": [
39+
"src/main.server.ts"
40+
]
41+
}
42+
`,
43+
'./src/main.server.ts': `
44+
import { dummyVersion } from 'dummy-lib';
45+
console.log(dummyVersion);
46+
`,
47+
// create a dummy library
48+
'./dummy-lib/package.json': `{
49+
"name": "dummy-lib",
50+
"version": "0.0.0",
51+
"typings": "./main.d.ts",
52+
"main": "./main.js"
53+
}`,
54+
'./dummy-lib/main.js': 'export const dummyVersion = 1',
55+
'./dummy-lib/main.d.ts': 'export declare const dummyVersion = 1',
56+
});
57+
58+
await symlinkFile(path.resolve('./dummy-lib'), path.resolve('./node_modules/dummy-lib'), 'dir');
59+
60+
await ng('run', 'test-project:server');
61+
// when preserve symlinks is true, it should not included node_modules in the bundle
62+
await expectFileToMatch('dist/test-project-server/main.js', 'require("dummy-lib")');
63+
64+
// cleanup the package
65+
await rimraf('node_modules/dummy-lib');
66+
}

0 commit comments

Comments
 (0)