Skip to content

Commit c15214c

Browse files
committed
fix(@schematics/angular): skip zone.js dependency for zoneless applications
A newly generated application no longer adds the `zone.js` dependency to the workspace if the `zoneless` option is enabled.
1 parent c7e73fa commit c15214c

File tree

4 files changed

+51
-3
lines changed

4 files changed

+51
-3
lines changed

packages/schematics/angular/application/index.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,14 @@ function addDependenciesToPackageJson(options: ApplicationOptions) {
149149
},
150150
].forEach((dependency) => addPackageJsonDependency(host, dependency));
151151

152+
if (!options.zoneless) {
153+
addPackageJsonDependency(host, {
154+
type: NodeDependencyType.Default,
155+
name: 'zone.js',
156+
version: latestVersions['zone.js'],
157+
});
158+
}
159+
152160
if (!options.skipInstall) {
153161
context.addTask(new NodePackageInstallTask());
154162
}

packages/schematics/angular/application/index_spec.ts

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,48 @@ describe('Application Schematic', () => {
268268
expect(pkg.devDependencies['typescript']).toEqual(latestVersions['typescript']);
269269
});
270270

271+
it('should include zone.js if "zoneless" option is false', async () => {
272+
const tree = await schematicRunner.runSchematic(
273+
'application',
274+
{
275+
...defaultOptions,
276+
zoneless: false,
277+
},
278+
workspaceTree,
279+
);
280+
281+
const pkg = JSON.parse(tree.readContent('/package.json'));
282+
expect(pkg.dependencies['zone.js']).toEqual(latestVersions['zone.js']);
283+
});
284+
285+
it('should include zone.js if "zoneless" option is not present', async () => {
286+
const tree = await schematicRunner.runSchematic(
287+
'application',
288+
{
289+
...defaultOptions,
290+
zoneless: undefined,
291+
},
292+
workspaceTree,
293+
);
294+
295+
const pkg = JSON.parse(tree.readContent('/package.json'));
296+
expect(pkg.dependencies['zone.js']).toEqual(latestVersions['zone.js']);
297+
});
298+
299+
it('should not include zone.js if "zoneless" option is true', async () => {
300+
const tree = await schematicRunner.runSchematic(
301+
'application',
302+
{
303+
...defaultOptions,
304+
zoneless: true,
305+
},
306+
workspaceTree,
307+
);
308+
309+
const pkg = JSON.parse(tree.readContent('/package.json'));
310+
expect(pkg.dependencies['zone.js']).toBeUndefined();
311+
});
312+
271313
it(`should not override existing users dependencies`, async () => {
272314
const oldPackageJson = workspaceTree.readContent('package.json');
273315
workspaceTree.overwrite(

packages/schematics/angular/workspace/files/package.json.template

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,7 @@
1717
"@angular/platform-browser": "<%= latestVersions.Angular %>",
1818
"@angular/router": "<%= latestVersions.Angular %>",
1919
"rxjs": "<%= latestVersions['rxjs'] %>",
20-
"tslib": "<%= latestVersions['tslib'] %>",
21-
"zone.js": "<%= latestVersions['zone.js'] %>"
20+
"tslib": "<%= latestVersions['tslib'] %>"
2221
},
2322
"devDependencies": {
2423
"@angular/cli": "<%= '^' + version %>",

packages/schematics/angular/workspace/index_spec.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@ describe('Workspace Schematic', () => {
5858
const pkg = JSON.parse(tree.readContent('/package.json'));
5959
expect(pkg.dependencies['@angular/core']).toEqual(latestVersions.Angular);
6060
expect(pkg.dependencies['rxjs']).toEqual(latestVersions['rxjs']);
61-
expect(pkg.dependencies['zone.js']).toEqual(latestVersions['zone.js']);
6261
expect(pkg.devDependencies['typescript']).toEqual(latestVersions['typescript']);
6362
});
6463

0 commit comments

Comments
 (0)