Skip to content

Commit 50d73d2

Browse files
authored
bug(build): Remove moduleId from components when building (#3664)
Fixes #3576
1 parent 142c518 commit 50d73d2

File tree

3 files changed

+61
-1
lines changed

3 files changed

+61
-1
lines changed

packages/@ngtools/webpack/src/loader.ts

+24-1
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,27 @@ function _replaceBootstrap(plugin: AotPlugin, refactor: TypeScriptFileRefactor)
8787
refactor.insertImport(entryModule.className + 'NgFactory', ngFactoryPath);
8888
}
8989

90+
export function removeModuleIdOnlyForTesting(refactor: TypeScriptFileRefactor) {
91+
_removeModuleId(refactor);
92+
}
93+
94+
function _removeModuleId(refactor: TypeScriptFileRefactor) {
95+
const sourceFile = refactor.sourceFile;
96+
97+
refactor.findAstNodes(sourceFile, ts.SyntaxKind.ObjectLiteralExpression, true)
98+
// Get all their property assignments.
99+
.filter((node: ts.ObjectLiteralExpression) =>
100+
node.properties.some(prop => prop.name.getText() == 'moduleId'))
101+
.forEach((node: ts.ObjectLiteralExpression) => {
102+
const moduleIdProp = node.properties.filter((prop: ts.ObjectLiteralElement, idx: number) => {
103+
return prop.name.getText() == 'moduleId';
104+
})[0];
105+
// get the trailing comma
106+
const moduleIdCommaProp = moduleIdProp.parent.getChildAt(1).getChildren()[1];
107+
refactor.removeNodes(moduleIdProp, moduleIdCommaProp);
108+
});
109+
}
110+
90111
function _replaceResources(refactor: TypeScriptFileRefactor): void {
91112
const sourceFile = refactor.sourceFile;
92113

@@ -163,7 +184,9 @@ export function ngcLoader(source: string) {
163184
.then(() => _removeDecorators(refactor))
164185
.then(() => _replaceBootstrap(plugin, refactor));
165186
} else {
166-
return _replaceResources(refactor);
187+
return Promise.resolve()
188+
.then(() => _replaceResources(refactor))
189+
.then(() => _removeModuleId(refactor));
167190
}
168191
})
169192
.then(() => {

packages/@ngtools/webpack/src/refactor.ts

+4
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,10 @@ export class TypeScriptFileRefactor {
169169
this._changed = true;
170170
}
171171

172+
removeNodes(...nodes: ts.Node[]) {
173+
nodes.forEach(node => this.removeNode(node));
174+
}
175+
172176
replaceNode(node: ts.Node, replacement: string) {
173177
let replaceSymbolName: boolean = node.kind === ts.SyntaxKind.Identifier;
174178
this._sourceString.overwrite(node.getStart(this._sourceFile),
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
'use strict';
2+
3+
// This needs to be first so fs module can be mocked correctly.
4+
import { expect } from 'chai';
5+
6+
import { removeModuleIdOnlyForTesting } from '../../packages/@ngtools/webpack/src/loader';
7+
8+
describe('@ngtools webpack loader: ', () => {
9+
describe('removeModuleId', () => {
10+
let refactor: any;
11+
let moduleIdProp: any;
12+
let commaProp: any;
13+
let removeNodesArgs: any;
14+
beforeEach(() => {
15+
commaProp = { isCommaProp: true };
16+
moduleIdProp = {
17+
name: { getText: () => 'moduleId' },
18+
parent: { getChildAt: () => ({ getChildren: (): any => [{}, commaProp] }) }
19+
};
20+
refactor = {
21+
sourceFile: 'sourceFile',
22+
findAstNodes: (): any => [{ properties: [moduleIdProp] }],
23+
removeNodes: (...args: any[]) => { removeNodesArgs = args; }
24+
};
25+
});
26+
27+
it('should remove "moduleId: module.id"', () => {
28+
removeModuleIdOnlyForTesting(refactor);
29+
expect(removeNodesArgs[0]).to.equal(moduleIdProp);
30+
expect(removeNodesArgs[1]).to.equal(commaProp);
31+
});
32+
});
33+
});

0 commit comments

Comments
 (0)