mirror of
https://github.com/angular/angular-cli.git
synced 2025-05-23 23:59:27 +08:00
Creating the host means listing all files and directory. On large directories it can be quite expensive. On ng new however we do not need to list everything, only detect conflicts, so using an empty tree as the host of the schematics makes sense.
114 lines
3.3 KiB
TypeScript
114 lines
3.3 KiB
TypeScript
import * as chalk from 'chalk';
|
|
import LinkCli from '../tasks/link-cli';
|
|
import NpmInstall from '../tasks/npm-install';
|
|
import { validateProjectName } from '../utilities/validate-project-name';
|
|
import {checkYarnOrCNPM} from '../utilities/check-package-manager';
|
|
import {CliConfig} from '../models/config';
|
|
|
|
const Task = require('../ember-cli/lib/models/task');
|
|
const SilentError = require('silent-error');
|
|
const GitInit = require('../tasks/git-init');
|
|
const packageJson = require('../package.json');
|
|
|
|
|
|
export default Task.extend({
|
|
|
|
run: function (commandOptions: any, rawArgs: string[]) {
|
|
if (commandOptions.dryRun) {
|
|
commandOptions.skipInstall = true;
|
|
}
|
|
|
|
// needs an explicit check in case it's just 'undefined'
|
|
// due to passing of options from 'new' and 'addon'
|
|
let gitInit: any;
|
|
if (commandOptions.skipGit === false) {
|
|
gitInit = new GitInit({
|
|
ui: this.ui,
|
|
project: this.project
|
|
});
|
|
}
|
|
|
|
const packageManager = CliConfig.fromGlobal().get('packageManager');
|
|
|
|
let npmInstall: any;
|
|
if (!commandOptions.skipInstall) {
|
|
npmInstall = new NpmInstall({
|
|
ui: this.ui,
|
|
project: this.project,
|
|
packageManager
|
|
});
|
|
}
|
|
|
|
let linkCli: any;
|
|
if (commandOptions.linkCli) {
|
|
linkCli = new LinkCli({
|
|
ui: this.ui,
|
|
project: this.project,
|
|
packageManager
|
|
});
|
|
}
|
|
|
|
const project = this.project;
|
|
const packageName = commandOptions.name !== '.' && commandOptions.name || project.name();
|
|
|
|
if (commandOptions.style === undefined) {
|
|
commandOptions.style = CliConfig.fromGlobal().get('defaults.styleExt');
|
|
}
|
|
|
|
if (!packageName) {
|
|
const message = 'The `ng ' + this.name + '` command requires a ' +
|
|
'package.json in current folder with name attribute or a specified name via arguments. ' +
|
|
'For more details, use `ng help`.';
|
|
|
|
return Promise.reject(new SilentError(message));
|
|
}
|
|
|
|
validateProjectName(packageName);
|
|
|
|
const SchematicRunTask = require('../tasks/schematic-run').default;
|
|
const schematicRunTask = new SchematicRunTask({
|
|
ui: this.ui,
|
|
project: this.project
|
|
});
|
|
|
|
const cwd = this.project.root;
|
|
const schematicName = CliConfig.fromGlobal().get('defaults.schematics.newApp');
|
|
commandOptions.version = packageJson.version;
|
|
|
|
const runOptions = {
|
|
taskOptions: commandOptions,
|
|
workingDir: cwd,
|
|
emptyHost: true,
|
|
collectionName: commandOptions.collectionName,
|
|
schematicName
|
|
};
|
|
|
|
return schematicRunTask.run(runOptions)
|
|
.then(function () {
|
|
if (!commandOptions.dryRun) {
|
|
process.chdir(commandOptions.directory);
|
|
}
|
|
})
|
|
.then(function () {
|
|
if (!commandOptions.skipInstall) {
|
|
return checkYarnOrCNPM().then(() => npmInstall.run());
|
|
}
|
|
})
|
|
.then(function () {
|
|
if (!commandOptions.dryRun && commandOptions.skipGit === false) {
|
|
return gitInit.run(commandOptions, rawArgs);
|
|
}
|
|
})
|
|
.then(function () {
|
|
if (!commandOptions.dryRun && commandOptions.linkCli) {
|
|
return linkCli.run();
|
|
}
|
|
})
|
|
.then(() => {
|
|
if (!commandOptions.dryRun) {
|
|
this.ui.writeLine(chalk.green(`Project '${packageName}' successfully created.`));
|
|
}
|
|
});
|
|
}
|
|
});
|