mirror of
https://github.com/ionic-team/ionic-framework.git
synced 2025-08-18 19:21:34 +08:00
fix(angular): ng-add schematic (#20281)
* fix(angular): update ng-add schematic to use the project name * fix(angular): use relative schematics collection.json path.
This commit is contained in:

committed by
Mike Hartington

parent
59d064979f
commit
09d951ae1b
@ -23,7 +23,7 @@ Ionic Angular specific building blocks on top of [@ionic/core](https://www.npmjs
|
|||||||
|
|
||||||
1. Pull the latest from master
|
1. Pull the latest from master
|
||||||
2. Build ionic/angular: `npm run build`
|
2. Build ionic/angular: `npm run build`
|
||||||
3. Run `npm link` from ionic/angular directory
|
3. Run `npm link` from `ionic/angular/dist` directory
|
||||||
4. Create a blank angular project
|
4. Create a blank angular project
|
||||||
|
|
||||||
```
|
```
|
||||||
|
@ -74,7 +74,7 @@
|
|||||||
"typescript": "3.4.5",
|
"typescript": "3.4.5",
|
||||||
"zone.js": "^0.8.28"
|
"zone.js": "^0.8.28"
|
||||||
},
|
},
|
||||||
"schematics": "schematics/collection.json",
|
"schematics": "./schematics/collection.json",
|
||||||
"ngPackage": {
|
"ngPackage": {
|
||||||
"lib": {
|
"lib": {
|
||||||
"entryFile": "src/index.ts"
|
"entryFile": "src/index.ts"
|
||||||
|
@ -1,9 +1,8 @@
|
|||||||
import { join, Path } from '@angular-devkit/core';
|
import { join, Path } from '@angular-devkit/core';
|
||||||
import { apply, chain, mergeWith, move, Rule, SchematicContext, SchematicsException, template, Tree, url } from '@angular-devkit/schematics';
|
import { apply, chain, mergeWith, move, Rule, SchematicContext, SchematicsException, template, Tree, url } from '@angular-devkit/schematics';
|
||||||
import { NodePackageInstallTask } from '@angular-devkit/schematics/tasks';
|
import { NodePackageInstallTask } from '@angular-devkit/schematics/tasks';
|
||||||
import { WorkspaceProject } from '@angular-devkit/core/src/experimental/workspace';
|
|
||||||
import { addModuleImportToRootModule } from './../utils/ast';
|
import { addModuleImportToRootModule } from './../utils/ast';
|
||||||
import { addArchitectBuilder, addStyle, getWorkspace, addAsset } from './../utils/config';
|
import { addArchitectBuilder, addStyle, getWorkspace, addAsset, WorkspaceProject, WorkspaceSchema } from './../utils/config';
|
||||||
import { addPackageToPackageJson } from './../utils/package';
|
import { addPackageToPackageJson } from './../utils/package';
|
||||||
import { Schema as IonAddOptions } from './schema';
|
import { Schema as IonAddOptions } from './schema';
|
||||||
|
|
||||||
@ -70,29 +69,29 @@ function addIonicons(): Rule {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function addIonicBuilder(project: WorkspaceProject): Rule {
|
function addIonicBuilder(projectName: string): Rule {
|
||||||
return (host: Tree) => {
|
return (host: Tree) => {
|
||||||
addArchitectBuilder(host, 'ionic-cordova-serve', {
|
addArchitectBuilder(host, 'ionic-cordova-serve', {
|
||||||
builder: '@ionic/angular-toolkit:cordova-serve',
|
builder: '@ionic/angular-toolkit:cordova-serve',
|
||||||
options: {
|
options: {
|
||||||
cordovaBuildTarget: `${project}:ionic-cordova-build`,
|
cordovaBuildTarget: `${projectName}:ionic-cordova-build`,
|
||||||
devServerTarget: `${project}:serve`
|
devServerTarget: `${projectName}:serve`
|
||||||
},
|
},
|
||||||
configurations: {
|
configurations: {
|
||||||
production: {
|
production: {
|
||||||
cordovaBuildTarget: `${project}:ionic-cordova-build:production`,
|
cordovaBuildTarget: `${projectName}:ionic-cordova-build:production`,
|
||||||
devServerTarget: `${project}:serve:production`
|
devServerTarget: `${projectName}:serve:production`
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
addArchitectBuilder(host, 'ionic-cordova-build', {
|
addArchitectBuilder(host, 'ionic-cordova-build', {
|
||||||
builder: '@ionic/angular-toolkit:cordova-build',
|
builder: '@ionic/angular-toolkit:cordova-build',
|
||||||
options: {
|
options: {
|
||||||
browserTarget: `${project}:build`
|
browserTarget: `${projectName}:build`
|
||||||
},
|
},
|
||||||
configurations: {
|
configurations: {
|
||||||
production: {
|
production: {
|
||||||
browserTarget: `${project}:build:production`
|
browserTarget: `${projectName}:build:production`
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -108,17 +107,17 @@ function installNodeDeps() {
|
|||||||
|
|
||||||
export default function ngAdd(options: IonAddOptions): Rule {
|
export default function ngAdd(options: IonAddOptions): Rule {
|
||||||
return (host: Tree) => {
|
return (host: Tree) => {
|
||||||
const workspace = getWorkspace(host);
|
const workspace: WorkspaceSchema = getWorkspace(host);
|
||||||
if (!options.project) {
|
if (!options.project) {
|
||||||
options.project = Object.keys(workspace.projects)[0];
|
options.project = Object.keys(workspace.projects)[0];
|
||||||
}
|
}
|
||||||
const project = workspace.projects[options.project];
|
const project: WorkspaceProject = workspace.projects[options.project];
|
||||||
if (project.projectType !== 'application') {
|
if (project.projectType !== 'application') {
|
||||||
throw new SchematicsException(
|
throw new SchematicsException(
|
||||||
`Ionic Add requires a project type of "application".`
|
`Ionic Add requires a project type of "application".`
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
const sourcePath = join(project.root as Path, project.sourceRoot as Path);
|
const sourcePath: Path = join(project.root as Path, project.sourceRoot as Path);
|
||||||
const rootTemplateSource = apply(url('./files/root'), [
|
const rootTemplateSource = apply(url('./files/root'), [
|
||||||
template({ ...options }),
|
template({ ...options }),
|
||||||
move(sourcePath)
|
move(sourcePath)
|
||||||
@ -128,7 +127,7 @@ export default function ngAdd(options: IonAddOptions): Rule {
|
|||||||
addIonicAngularToPackageJson(),
|
addIonicAngularToPackageJson(),
|
||||||
addIonicAngularToolkitToPackageJson(),
|
addIonicAngularToolkitToPackageJson(),
|
||||||
addIonicAngularModuleToAppModule(sourcePath),
|
addIonicAngularModuleToAppModule(sourcePath),
|
||||||
addIonicBuilder(project),
|
addIonicBuilder(options.project),
|
||||||
addIonicStyles(sourcePath),
|
addIonicStyles(sourcePath),
|
||||||
addIonicons(),
|
addIonicons(),
|
||||||
mergeWith(rootTemplateSource),
|
mergeWith(rootTemplateSource),
|
||||||
|
@ -89,6 +89,7 @@ export function addArchitectBuilder(host: Tree, builderName: string, builderOpts
|
|||||||
}
|
}
|
||||||
|
|
||||||
export type WorkspaceSchema = experimental.workspace.WorkspaceSchema;
|
export type WorkspaceSchema = experimental.workspace.WorkspaceSchema;
|
||||||
|
export type WorkspaceProject = experimental.workspace.WorkspaceProject;
|
||||||
|
|
||||||
export function getWorkspacePath(host: Tree): string {
|
export function getWorkspacePath(host: Tree): string {
|
||||||
const possibleFiles = ['/angular.json', '/.angular.json'];
|
const possibleFiles = ['/angular.json', '/.angular.json'];
|
||||||
|
Reference in New Issue
Block a user