diff --git a/e2e/utils.ts b/e2e/utils.ts index d9d1450d17..86edc495c8 100644 --- a/e2e/utils.ts +++ b/e2e/utils.ts @@ -14,7 +14,6 @@ export function newProject(): void { cleanup(); if (!directoryExists('./tmp/proj_backup')) { runNgNew('--collection=@nrwl/schematics --npmScope=proj'); - execSync('npm i', {cwd: `./tmp/${projectName}`}); copyMissingPackages(); execSync('mv ./tmp/proj ./tmp/proj_backup'); } diff --git a/packages/schematics/src/collection/application/index.ts b/packages/schematics/src/collection/application/index.ts index 256d793868..27c274cab9 100644 --- a/packages/schematics/src/collection/application/index.ts +++ b/packages/schematics/src/collection/application/index.ts @@ -1,11 +1,14 @@ -import {apply, branchAndMerge, chain, mergeWith, Rule, template, url} from '@angular-devkit/schematics'; +import {apply, branchAndMerge, chain, mergeWith, Rule, template, url, SchematicContext} from '@angular-devkit/schematics'; import {Schema} from './schema'; import {strings} from '@angular-devkit/core'; +import {RepositoryInitializerTask, NodePackageInstallTask} from '@angular-devkit/schematics/tasks'; import {libVersions} from '../utility/lib-versions'; import {wrapIntoFormat} from '../utility/tasks'; export default function(options: Schema): Rule { - return wrapIntoFormat(() => { + return wrapIntoFormat((context: SchematicContext) => { + addSkipInstallAndSkipGit(options, context); + const npmScope = options.npmScope ? options.npmScope : options.name; const templateSource = apply(url('./files'), [ template({ @@ -19,3 +22,13 @@ export default function(options: Schema): Rule { return chain([branchAndMerge(chain([mergeWith(templateSource)]))]); }); } + +function addSkipInstallAndSkipGit(options: Schema, context: SchematicContext) { + let packageTask; + if (!options.skipInstall) { + packageTask = context.addTask(new NodePackageInstallTask(options.directory)); + } + if (!options.skipGit) { + context.addTask(new RepositoryInitializerTask(options.directory, options.commit), packageTask ? [packageTask] : []); + } +} diff --git a/packages/schematics/src/collection/application/schema.d.ts b/packages/schematics/src/collection/application/schema.d.ts index d471347459..e7aa46592f 100644 --- a/packages/schematics/src/collection/application/schema.d.ts +++ b/packages/schematics/src/collection/application/schema.d.ts @@ -6,4 +6,7 @@ export interface Schema { prefix?: string; style?: string; minimal?: boolean; + skipInstall?: boolean; + commit?: { name: string, email: string, message?: string }; + skipGit?: boolean; } diff --git a/packages/schematics/src/collection/application/schema.json b/packages/schematics/src/collection/application/schema.json index 2f50839959..6ccad614be 100644 --- a/packages/schematics/src/collection/application/schema.json +++ b/packages/schematics/src/collection/application/schema.json @@ -17,6 +17,43 @@ "type": "string", "description": "Npm scope for importing libs." }, + "skipInstall": { + "description": "Skip installing dependency packages.", + "type": "boolean", + "default": false + }, + "skipGit": { + "description": "Skip initializing a git repository.", + "type": "boolean", + "default": false, + "alias": "sg" + }, + "commit": { + "description": "Initial repository commit information.", + "default": null, + "oneOf": [ + { "type": "null" }, + { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "email": { + "type": "string", + "format": "email" + }, + "message": { + "type": "string" + } + }, + "required": [ + "name", + "email" + ] + } + ] + }, "version": { "type": "string" }, diff --git a/packages/schematics/src/collection/utility/tasks.ts b/packages/schematics/src/collection/utility/tasks.ts index eb6e98ea19..b3903ec386 100644 --- a/packages/schematics/src/collection/utility/tasks.ts +++ b/packages/schematics/src/collection/utility/tasks.ts @@ -15,6 +15,6 @@ export class FormatFiles implements TaskConfigurationGenerator { export function wrapIntoFormat(fn: Function): any { return (host: Tree, context: SchematicContext) => { context.addTask(new FormatFiles()); - return fn()(host, context); + return fn(context)(host, context); }; } \ No newline at end of file diff --git a/scripts/build.sh b/scripts/build.sh index 9b8891bb56..8fb001b810 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -1,7 +1,7 @@ #!/bin/bash rm -rf build -ngc +./node_modules/.bin/ngc rsync -a --exclude=*.ts packages/ build/packages chmod +x build/packages/schematics/bin/create-nx-workspace.js chmod +x build/packages/schematics/src/command-line/nx.js