Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 6713cd1

Browse files
clydinalan-agius4
authored andcommitted
refactor(@schematics/angular): use new dependency management utilities
Refactors several schematics (`application`, `library`, `service-worker`, and two migrations) to use the new, centralized dependency management utilities (`addDependency`, `removeDependency`, `getDependency`). This change migrates away from the older, class-based `dependencies.ts` helper and consolidates all dependency logic on the more robust, functional `dependency.ts` utility. This improves consistency and leverages the enhanced features of the new utilities, such as automatic and configurable installation task management.
1 parent ff71111 commit 6713cd1

File tree

5 files changed

+83
-97
lines changed

5 files changed

+83
-97
lines changed

‎packages/schematics/angular/application/index.ts‎

Lines changed: 43 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,12 @@ import {
2525
} from '@angular-devkit/schematics';
2626
import { NodePackageInstallTask } from '@angular-devkit/schematics/tasks';
2727
import { Schema as ComponentOptions } from '../component/schema';
28-
import { NodeDependencyType, addPackageJsonDependency } from '../utility/dependencies';
28+
import {
29+
DependencyType,
30+
ExistingBehavior,
31+
InstallBehavior,
32+
addDependency,
33+
} from '../utility/dependency';
2934
import { JSONFile } from '../utility/json-file';
3035
import { latestVersions } from '../utility/latest-versions';
3136
import { relativePathToWorkspaceRoot } from '../utility/paths';
@@ -130,48 +135,46 @@ export default function (options: ApplicationOptions): Rule {
130135
};
131136
}
132137

133-
function addDependenciesToPackageJson(options: ApplicationOptions) {
134-
return (host: Tree, context: SchematicContext) => {
135-
[
136-
{
137-
type: NodeDependencyType.Dev,
138-
name: '@angular/compiler-cli',
139-
version: latestVersions.Angular,
140-
},
141-
{
142-
type: NodeDependencyType.Dev,
143-
name: '@angular/build',
144-
version: latestVersions.AngularBuild,
145-
},
146-
{
147-
type: NodeDependencyType.Dev,
148-
name: 'typescript',
149-
version: latestVersions['typescript'],
150-
},
151-
].forEach((dependency) => addPackageJsonDependency(host, dependency));
152-
153-
if (!options.zoneless) {
154-
addPackageJsonDependency(host, {
155-
type: NodeDependencyType.Default,
156-
name: 'zone.js',
157-
version: latestVersions['zone.js'],
158-
});
159-
}
138+
function addDependenciesToPackageJson(options: ApplicationOptions): Rule {
139+
const rules: Rule[] = [
140+
addDependency('@angular/compiler-cli', latestVersions.Angular, {
141+
type: DependencyType.Dev,
142+
existing: ExistingBehavior.Skip,
143+
install: options.skipInstall ? InstallBehavior.None : InstallBehavior.Auto,
144+
}),
145+
addDependency('@angular/build', latestVersions.AngularBuild, {
146+
type: DependencyType.Dev,
147+
existing: ExistingBehavior.Skip,
148+
install: options.skipInstall ? InstallBehavior.None : InstallBehavior.Auto,
149+
}),
150+
addDependency('typescript', latestVersions['typescript'], {
151+
type: DependencyType.Dev,
152+
existing: ExistingBehavior.Skip,
153+
install: options.skipInstall ? InstallBehavior.None : InstallBehavior.Auto,
154+
}),
155+
];
160156

161-
if (options.style === Style.Less) {
162-
addPackageJsonDependency(host, {
163-
type: NodeDependencyType.Dev,
164-
name: 'less',
165-
version: latestVersions['less'],
166-
});
167-
}
157+
if (!options.zoneless) {
158+
rules.push(
159+
addDependency('zone.js', latestVersions['zone.js'], {
160+
type: DependencyType.Default,
161+
existing: ExistingBehavior.Skip,
162+
install: options.skipInstall ? InstallBehavior.None : InstallBehavior.Auto,
163+
}),
164+
);
165+
}
168166

169-
if (!options.skipInstall) {
170-
context.addTask(new NodePackageInstallTask());
171-
}
167+
if (options.style === Style.Less) {
168+
rules.push(
169+
addDependency('less', latestVersions['less'], {
170+
type: DependencyType.Dev,
171+
existing: ExistingBehavior.Skip,
172+
install: options.skipInstall ? InstallBehavior.None : InstallBehavior.Auto,
173+
}),
174+
);
175+
}
172176

173-
return host;
174-
};
177+
return chain(rules);
175178
}
176179

177180
function addAppToWorkspaceFile(options: ApplicationOptions, appDir: string): Rule {

‎packages/schematics/angular/library/index.ts‎

Lines changed: 29 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,11 @@ import {
2323
import { NodePackageInstallTask } from '@angular-devkit/schematics/tasks';
2424
import { join } from 'node:path/posix';
2525
import {
26-
NodeDependencyType,
27-
addPackageJsonDependency,
28-
getPackageJsonDependency,
29-
} from '../utility/dependencies';
26+
DependencyType,
27+
ExistingBehavior,
28+
addDependency,
29+
getDependency,
30+
} from '../utility/dependency';
3031
import { JSONFile } from '../utility/json-file';
3132
import { latestVersions } from '../utility/latest-versions';
3233
import { relativePathToWorkspaceRoot } from '../utility/paths';
@@ -62,38 +63,29 @@ function addTsProjectReference(...paths: string[]) {
6263
};
6364
}
6465

65-
function addDependenciesToPackageJson() {
66-
return (host: Tree) => {
67-
[
68-
{
69-
type: NodeDependencyType.Dev,
70-
name: '@angular/compiler-cli',
71-
version: latestVersions.Angular,
72-
},
73-
{
74-
type: NodeDependencyType.Dev,
75-
name: '@angular/build',
76-
version: latestVersions.AngularBuild,
77-
},
78-
{
79-
type: NodeDependencyType.Dev,
80-
name: 'ng-packagr',
81-
version: latestVersions.NgPackagr,
82-
},
83-
{
84-
type: NodeDependencyType.Default,
85-
name: 'tslib',
86-
version: latestVersions['tslib'],
87-
},
88-
{
89-
type: NodeDependencyType.Dev,
90-
name: 'typescript',
91-
version: latestVersions['typescript'],
92-
},
93-
].forEach((dependency) => addPackageJsonDependency(host, dependency));
94-
95-
return host;
96-
};
66+
function addDependenciesToPackageJson(): Rule {
67+
return chain([
68+
addDependency('@angular/compiler-cli', latestVersions.Angular, {
69+
type: DependencyType.Dev,
70+
existing: ExistingBehavior.Skip,
71+
}),
72+
addDependency('@angular/build', latestVersions.AngularBuild, {
73+
type: DependencyType.Dev,
74+
existing: ExistingBehavior.Skip,
75+
}),
76+
addDependency('ng-packagr', latestVersions.NgPackagr, {
77+
type: DependencyType.Dev,
78+
existing: ExistingBehavior.Skip,
79+
}),
80+
addDependency('tslib', latestVersions['tslib'], {
81+
type: DependencyType.Default,
82+
existing: ExistingBehavior.Skip,
83+
}),
84+
addDependency('typescript', latestVersions['typescript'], {
85+
type: DependencyType.Dev,
86+
existing: ExistingBehavior.Skip,
87+
}),
88+
]);
9789
}
9890

9991
function addLibToWorkspaceFile(
@@ -177,7 +169,7 @@ export default function (options: LibraryOptions): Rule {
177169
move(libDir),
178170
]);
179171

180-
const hasZoneDependency = getPackageJsonDependency(host, 'zone.js') !== null;
172+
const hasZoneDependency = getDependency(host, 'zone.js') !== null;
181173

182174
return chain([
183175
mergeWith(templateSource),

‎packages/schematics/angular/migrations/replace-provide-server-rendering-import/migration.ts‎

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
*/
88

99
import { DirEntry, Rule } from '@angular-devkit/schematics';
10-
import *asts from '../../third_party/github.com/Microsoft/TypeScript/lib/typescript';
11-
import { NodeDependencyType,addPackageJsonDependency} from '../../utility/dependencies';
10+
import ts from '../../third_party/github.com/Microsoft/TypeScript/lib/typescript';
11+
import { addDependency} from '../../utility/dependency';
1212
import { latestVersions } from '../../utility/latest-versions';
1313

1414
function* visit(directory: DirEntry): IterableIterator<[fileName: string, contents: string]> {
@@ -39,7 +39,7 @@ function* visit(directory: DirEntry): IterableIterator<[fileName: string, conten
3939

4040
export default function (): Rule {
4141
return async (tree) => {
42-
let angularSSRAdded=false;
42+
let rule: Rule|undefined;
4343

4444
for (const [filePath, content] of visit(tree.root)) {
4545
let updatedContent = content;
@@ -100,17 +100,12 @@ export default function (): Rule {
100100
if (content !== updatedContent) {
101101
tree.overwrite(filePath, updatedContent);
102102

103-
if (!angularSSRAdded) {
104-
addPackageJsonDependency(tree, {
105-
name: '@angular/ssr',
106-
version: latestVersions.AngularSSR,
107-
type: NodeDependencyType.Default,
108-
overwrite: false,
109-
});
110-
111-
angularSSRAdded = true;
103+
if (rule === undefined) {
104+
rule = addDependency('@angular/ssr', latestVersions.AngularSSR);
112105
}
113106
}
114107
}
108+
109+
return rule;
115110
};
116111
}

‎packages/schematics/angular/migrations/use-application-builder/migration.ts‎

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,11 @@ import {
1515
externalSchematic,
1616
} from '@angular-devkit/schematics';
1717
import { dirname, join } from 'node:path/posix';
18-
import { removePackageJsonDependency } from '../../utility/dependencies';
1918
import {
2019
DependencyType,
2120
ExistingBehavior,
22-
InstallBehavior,
2321
addDependency,
22+
removeDependency,
2423
} from '../../utility/dependency';
2524
import { JSONFile } from '../../utility/json-file';
2625
import { latestVersions } from '../../utility/latest-versions';
@@ -270,13 +269,10 @@ function updateProjects(tree: Tree, context: SchematicContext) {
270269
rules.push(
271270
addDependency('@angular/build', latestVersions.DevkitBuildAngular, {
272271
type: DependencyType.Dev,
273-
// Always is set here since removePackageJsonDependency below does not automatically
274-
// trigger the package manager execution.
275-
install: InstallBehavior.Always,
276272
existing: ExistingBehavior.Replace,
277273
}),
274+
removeDependency('@angular-devkit/build-angular'),
278275
);
279-
removePackageJsonDependency(tree, '@angular-devkit/build-angular');
280276

281277
// Add less dependency if any projects contain a Less stylesheet file.
282278
// This check does not consider Node.js packages due to the performance

‎packages/schematics/angular/service-worker/index.ts‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import * as ts from '../third_party/github.com/Microsoft/TypeScript/lib/typescri
2323
import { addDependency, addRootProvider, readWorkspace, writeWorkspace } from '../utility';
2424
import { addSymbolToNgModuleMetadata, insertImport } from '../utility/ast-utils';
2525
import { applyToUpdateRecorder } from '../utility/change';
26-
import { getPackageJsonDependency } from '../utility/dependencies';
26+
import { getDependency } from '../utility/dependency';
2727
import { getAppModulePath, isStandaloneApp } from '../utility/ng-ast-utils';
2828
import { relativePathToWorkspaceRoot } from '../utility/paths';
2929
import { targetBuildNotFoundError } from '../utility/project-targets';
@@ -34,7 +34,7 @@ import { Schema as ServiceWorkerOptions } from './schema';
3434

3535
function addDependencies(): Rule {
3636
return (host: Tree) => {
37-
const coreDep = getPackageJsonDependency(host, '@angular/core');
37+
const coreDep = getDependency(host, '@angular/core');
3838
if (!coreDep) {
3939
throw new SchematicsException('Could not find "@angular/core" version.');
4040
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /