From f9d87261dfae4e62d11e06e11646178626c23467 Mon Sep 17 00:00:00 2001 From: Rohit Sarkar Date: Sat, 6 Oct 2018 03:33:10 +0530 Subject: [PATCH] feat(@schematics/angular): Add --minimal flag to generate a barebones project --- .../schematics/angular/application/index.ts | 20 ++++++++++++++++++- .../angular/application/schema.json | 5 +++++ packages/schematics/angular/ng-new/index.ts | 1 + .../schematics/angular/ng-new/schema.json | 5 +++++ .../angular/workspace/files/package.json | 6 +++--- .../schematics/angular/workspace/schema.json | 5 +++++ tests/legacy-cli/e2e_runner.ts | 1 - 7 files changed, 38 insertions(+), 5 deletions(-) diff --git a/packages/schematics/angular/application/index.ts b/packages/schematics/angular/application/index.ts index 4020f216c676..213c9f20de77 100644 --- a/packages/schematics/angular/application/index.ts +++ b/packages/schematics/angular/application/index.ts @@ -240,6 +240,14 @@ function addAppToWorkspaceFile(options: ApplicationOptions, workspace: Workspace return addProjectToWorkspace(workspace, options.name, project); } +function minimalPathFilter(path: string): boolean { + const toRemoveList: RegExp[] = [/e2e\//, /editorconfig/, /README/, /karma.conf.js/, + /protractor.conf.js/, /test.ts/, /tsconfig.spec.json/, + /tslint.json/, /favicon.ico/]; + + return !toRemoveList.some(re => re.test(path)); +} + export default function (options: ApplicationOptions): Rule { return (host: Tree, context: SchematicContext) => { if (!options.name) { @@ -248,12 +256,19 @@ export default function (options: ApplicationOptions): Rule { validateProjectName(options.name); const prefix = options.prefix || 'app'; const appRootSelector = `${prefix}-root`; - const componentOptions = { + const componentOptions = !options.minimal ? + { inlineStyle: options.inlineStyle, inlineTemplate: options.inlineTemplate, spec: !options.skipTests, styleext: options.style, viewEncapsulation: options.viewEncapsulation, + } : + { + inlineStyle: true, + InlineTemplate: true, + spec: false, + styleext: options.style, }; const workspace = getWorkspace(host); @@ -287,6 +302,7 @@ export default function (options: ApplicationOptions): Rule { options.skipPackageJson ? noop() : addDependenciesToPackageJson(), mergeWith( apply(url('./files/src'), [ + options.minimal ? filter(minimalPathFilter) : noop(), template({ utils: strings, ...options, @@ -297,6 +313,7 @@ export default function (options: ApplicationOptions): Rule { ])), mergeWith( apply(url('./files/root'), [ + options.minimal ? filter(minimalPathFilter) : noop(), template({ utils: strings, ...options, @@ -308,6 +325,7 @@ export default function (options: ApplicationOptions): Rule { ])), mergeWith( apply(url('./files/lint'), [ + options.minimal ? filter(minimalPathFilter) : noop(), template({ utils: strings, ...options, diff --git a/packages/schematics/angular/application/schema.json b/packages/schematics/angular/application/schema.json index 6c2db3d8f543..cb833cd4b059 100644 --- a/packages/schematics/angular/application/schema.json +++ b/packages/schematics/angular/application/schema.json @@ -66,6 +66,11 @@ "type": "boolean", "default": false, "description": "Do not add dependencies to package.json." + }, + "minimal": { + "description": "Create a barebones project without any testing frameworks", + "type": "boolean", + "default": false } }, "required": [ diff --git a/packages/schematics/angular/ng-new/index.ts b/packages/schematics/angular/ng-new/index.ts index a5229e6dcf86..aab49ab4a894 100644 --- a/packages/schematics/angular/ng-new/index.ts +++ b/packages/schematics/angular/ng-new/index.ts @@ -42,6 +42,7 @@ export default function (options: NgNewOptions): Rule { version: options.version, experimentalAngularNext: options.experimentalIvy, newProjectRoot: options.newProjectRoot || 'projects', + minimal: options.minimal, }; const applicationOptions: ApplicationOptions = { projectRoot: '', diff --git a/packages/schematics/angular/ng-new/schema.json b/packages/schematics/angular/ng-new/schema.json index e79aeffc79b4..e80bc82bc3de 100644 --- a/packages/schematics/angular/ng-new/schema.json +++ b/packages/schematics/angular/ng-new/schema.json @@ -136,6 +136,11 @@ "description": "Flag to toggle creation of an application in the new workspace.", "type": "boolean", "default": true + }, + "minimal": { + "description": "Create a barebones project without any testing frameworks", + "type": "boolean", + "default": false } }, "required": [ diff --git a/packages/schematics/angular/workspace/files/package.json b/packages/schematics/angular/workspace/files/package.json index ad89cd8a75ae..3810f58197f3 100644 --- a/packages/schematics/angular/workspace/files/package.json +++ b/packages/schematics/angular/workspace/files/package.json @@ -28,9 +28,9 @@ "@angular/cli": "<%= experimentalAngularNext ? 'next' : '~' + version %>", "@angular/compiler-cli": "<%= experimentalAngularNext ? 'next' : latestVersions.Angular %>", "@angular/language-service": "<%= experimentalAngularNext ? 'next' : latestVersions.Angular %>", - "@types/jasmine": "~2.8.8", - "@types/jasminewd2": "~2.0.3", "@types/node": "~8.9.4", + <% if (!minimal) { %>"@types/jasmine": "~2.8.8", + "@types/jasminewd2": "~2.0.3", "codelyzer": "~4.3.0", "jasmine-core": "~2.99.1", "jasmine-spec-reporter": "~4.2.1", @@ -39,7 +39,7 @@ "karma-coverage-istanbul-reporter": "~2.0.1", "karma-jasmine": "~1.1.2", "karma-jasmine-html-reporter": "^0.2.2", - "protractor": "~5.4.0", + "protractor": "~5.4.0",<% } %> "ts-node": "~7.0.0", "tslint": "~5.11.0", "typescript": "<%= latestVersions.TypeScript %>" diff --git a/packages/schematics/angular/workspace/schema.json b/packages/schematics/angular/workspace/schema.json index c5f296fb06c7..9268d1b64006 100644 --- a/packages/schematics/angular/workspace/schema.json +++ b/packages/schematics/angular/workspace/schema.json @@ -73,6 +73,11 @@ "$default": { "$source": "ng-cli-version" } + }, + "minimal": { + "description": "Create a barebones project without any testing frameworks", + "type": "boolean", + "default": false } }, "required": [ diff --git a/tests/legacy-cli/e2e_runner.ts b/tests/legacy-cli/e2e_runner.ts index 7eebdf2acb23..0f2db025b2bf 100644 --- a/tests/legacy-cli/e2e_runner.ts +++ b/tests/legacy-cli/e2e_runner.ts @@ -114,7 +114,6 @@ const allTests = glob.sync(path.join(e2eRoot, testGlob), { nodir: true, ignore: // Replace windows slashes. .map(name => name.replace(/\\/g, '/')) .filter(name => !name.endsWith('/build-app-shell-with-schematic.ts')) - .filter(name => !name.endsWith('/new-minimal.ts')) // IS this test still valid? \/ .filter(name => !name.endsWith('/module-id.ts')) // Do we want to support this?