diff --git a/packages/@angular/cli/commands/build.run.ts b/packages/@angular/cli/commands/build.run.ts deleted file mode 100644 index 668a4261e1..0000000000 --- a/packages/@angular/cli/commands/build.run.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { Version } from '../upgrade/version'; -import Build from '../tasks/build'; -import { BuildTaskOptions } from './build'; - -export default function buildRun(commandOptions: BuildTaskOptions) { - const project = this.project; - - // Check angular version. - Version.assertAngularVersionIs2_3_1OrHigher(project.root); - - const buildTask = new Build({ - cliProject: project, - ui: this.ui, - }); - - return buildTask.run(commandOptions); -} diff --git a/packages/@angular/cli/commands/build.ts b/packages/@angular/cli/commands/build.ts index bfcf787562..8b40b6a7e0 100644 --- a/packages/@angular/cli/commands/build.ts +++ b/packages/@angular/cli/commands/build.ts @@ -1,4 +1,5 @@ -import { BuildOptions } from '../models/webpack-config'; +import { BuildOptions } from '../models/build-options'; +import { Version } from '../upgrade/version'; const Command = require('../ember-cli/lib/models/command'); @@ -22,7 +23,7 @@ export const BaseBuildCommandOptions: any = [ { name: 'i18n-file', type: String }, { name: 'i18n-format', type: String }, { name: 'locale', type: String }, - { name: 'extract-css', type: Boolean, aliases: ['ec']}, + { name: 'extract-css', type: Boolean, aliases: ['ec'] }, { name: 'output-hashing', type: String, @@ -46,7 +47,19 @@ const BuildCommand = Command.extend({ ]), run: function (commandOptions: BuildTaskOptions) { - return require('./build.run').default.call(this, commandOptions); + const project = this.project; + + // Check angular version. + Version.assertAngularVersionIs2_3_1OrHigher(project.root); + + const BuildTask = require('../tasks/build').default; + + const buildTask = new BuildTask({ + cliProject: project, + ui: this.ui, + }); + + return buildTask.run(commandOptions); } }); diff --git a/packages/@angular/cli/commands/help.ts b/packages/@angular/cli/commands/help.ts index e0906d063f..f450ccc3ea 100644 --- a/packages/@angular/cli/commands/help.ts +++ b/packages/@angular/cli/commands/help.ts @@ -22,7 +22,7 @@ const HelpCommand = Command.extend({ run: function (commandOptions: any, rawArgs: any) { let commandFiles = fs.readdirSync(__dirname) // Remove files that are not JavaScript or Typescript - .filter(file => file.match(/\.(j|t)s$/) && !file.match(/\.d.ts$/) && !file.match(/\.run.ts$/)) + .filter(file => file.match(/\.(j|t)s$/) && !file.match(/\.d.ts$/)) .map(file => path.parse(file).name) .map(file => file.toLowerCase()); diff --git a/packages/@angular/cli/commands/init.run.ts b/packages/@angular/cli/commands/init.run.ts deleted file mode 100644 index c243ab4b76..0000000000 --- a/packages/@angular/cli/commands/init.run.ts +++ /dev/null @@ -1,99 +0,0 @@ -import * as chalk from 'chalk'; -import LinkCli from '../tasks/link-cli'; -import NpmInstall from '../tasks/npm-install'; -import { validateProjectName } from '../utilities/validate-project-name'; - -const Promise = require('../ember-cli/lib/ext/promise'); -const SilentError = require('silent-error'); -const normalizeBlueprint = require('../ember-cli/lib/utilities/normalize-blueprint-option'); -const GitInit = require('../tasks/git-init'); - - -export default function initRun(commandOptions: any, rawArgs: string[]) { - if (commandOptions.dryRun) { - commandOptions.skipNpm = true; - } - - const installBlueprint = new this.tasks.InstallBlueprint({ - ui: this.ui, - project: this.project - }); - - // 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 - }); - } - - let npmInstall: any; - if (!commandOptions.skipNpm) { - npmInstall = new NpmInstall({ - ui: this.ui, - project: this.project - }); - } - - let linkCli: any; - if (commandOptions.linkCli) { - linkCli = new LinkCli({ - ui: this.ui, - project: this.project - }); - } - - const project = this.project; - const packageName = commandOptions.name !== '.' && commandOptions.name || project.name(); - - 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)); - } - - const blueprintOpts = { - dryRun: commandOptions.dryRun, - blueprint: 'ng2', - rawName: packageName, - targetFiles: rawArgs || '', - rawArgs: rawArgs.toString(), - sourceDir: commandOptions.sourceDir, - style: commandOptions.style, - prefix: commandOptions.prefix, - routing: commandOptions.routing, - inlineStyle: commandOptions.inlineStyle, - inlineTemplate: commandOptions.inlineTemplate, - ignoredUpdateFiles: ['favicon.ico'], - skipGit: commandOptions.skipGit, - skipTests: commandOptions.skipTests - }; - - validateProjectName(packageName); - - blueprintOpts.blueprint = normalizeBlueprint(blueprintOpts.blueprint); - - return installBlueprint.run(blueprintOpts) - .then(function () { - if (commandOptions.skipGit === false) { - return gitInit.run(commandOptions, rawArgs); - } - }) - .then(function () { - if (!commandOptions.skipNpm) { - return npmInstall.run(); - } - }) - .then(function () { - if (commandOptions.linkCli) { - return linkCli.run(); - } - }) - .then(() => { - this.ui.writeLine(chalk.green(`Project '${packageName}' successfully created.`)); - }); -} diff --git a/packages/@angular/cli/commands/init.ts b/packages/@angular/cli/commands/init.ts index 4db7aa5b01..5246fb7a37 100644 --- a/packages/@angular/cli/commands/init.ts +++ b/packages/@angular/cli/commands/init.ts @@ -26,7 +26,16 @@ const InitCommand: any = Command.extend({ anonymousOptions: [''], run: function (commandOptions: any, rawArgs: string[]) { - return require('./init.run').default.call(this, commandOptions, rawArgs); + const InitTask = require('../tasks/init').default; + + const initTask = new InitTask({ + cliProject: this.project, + project: this.project, + tasks: this.tasks, + ui: this.ui, + }); + + return initTask.run(commandOptions, rawArgs); } }); diff --git a/packages/@angular/cli/commands/serve.run.ts b/packages/@angular/cli/commands/serve.run.ts deleted file mode 100644 index 3b3992426a..0000000000 --- a/packages/@angular/cli/commands/serve.run.ts +++ /dev/null @@ -1,67 +0,0 @@ -import * as denodeify from 'denodeify'; -const assign = require('lodash/assign'); -const SilentError = require('silent-error'); -const PortFinder = require('portfinder'); -import ServeTask from '../tasks/serve'; -import { Version } from '../upgrade/version'; -import { ServeTaskOptions } from './serve'; - -PortFinder.basePort = 49152; - -const getPort = denodeify(PortFinder.getPort); - -export default function serveRun(commandOptions: ServeTaskOptions) { - // Check angular version. - Version.assertAngularVersionIs2_3_1OrHigher(this.project.root); - commandOptions.liveReloadHost = commandOptions.liveReloadHost || commandOptions.host; - - return checkExpressPort(commandOptions) - .then(() => autoFindLiveReloadPort(commandOptions)) - .then((opts: ServeTaskOptions) => { - const serve = new ServeTask({ - ui: this.ui, - project: this.project, - }); - - return serve.run(opts); - }); -} - -function checkExpressPort(commandOptions: ServeTaskOptions) { - return getPort({ port: commandOptions.port, host: commandOptions.host }) - .then((foundPort: number) => { - - if (commandOptions.port !== foundPort && commandOptions.port !== 0) { - throw new SilentError( - `Port ${commandOptions.port} is already in use. Use '--port' to specify a different port.` - ); - } - - // otherwise, our found port is good - commandOptions.port = foundPort; - return commandOptions; - - }); -} - -function autoFindLiveReloadPort(commandOptions: ServeTaskOptions) { - return getPort({ port: commandOptions.liveReloadPort, host: commandOptions.liveReloadHost }) - .then((foundPort: number) => { - - // if live reload port matches express port, try one higher - if (foundPort === commandOptions.port) { - commandOptions.liveReloadPort = foundPort + 1; - return autoFindLiveReloadPort(commandOptions); - } - - // port was already open - if (foundPort === commandOptions.liveReloadPort) { - return commandOptions; - } - - // use found port as live reload port - commandOptions.liveReloadPort = foundPort; - return commandOptions; - - }); -} diff --git a/packages/@angular/cli/commands/serve.ts b/packages/@angular/cli/commands/serve.ts index e7ba4b7c94..c1ba57290d 100644 --- a/packages/@angular/cli/commands/serve.ts +++ b/packages/@angular/cli/commands/serve.ts @@ -1,12 +1,18 @@ -import { BuildOptions } from '../models/webpack-config'; +import * as denodeify from 'denodeify'; +import { BuildOptions } from '../models/build-options'; import { BaseBuildCommandOptions } from './build'; import { CliConfig } from '../models/config'; +import { Version } from '../upgrade/version'; +import { ServeTaskOptions } from './serve'; + +const SilentError = require('silent-error'); const PortFinder = require('portfinder'); const Command = require('../ember-cli/lib/models/command'); -const config = CliConfig.fromProject() || CliConfig.fromGlobal(); +const getPort = denodeify(PortFinder.getPort); PortFinder.basePort = 49152; +const config = CliConfig.fromProject() || CliConfig.fromGlobal(); const defaultPort = process.env.PORT || config.get('defaults.serve.port'); const defaultHost = config.get('defaults.serve.host'); @@ -32,7 +38,7 @@ const ServeCommand = Command.extend({ aliases: ['server', 's'], availableOptions: BaseBuildCommandOptions.concat([ - { name: 'port', type: Number, default: defaultPort, aliases: ['p'] }, + { name: 'port', type: Number, default: defaultPort, aliases: ['p'] }, { name: 'host', type: String, @@ -40,8 +46,8 @@ const ServeCommand = Command.extend({ aliases: ['H'], description: `Listens only on ${defaultHost} by default` }, - { name: 'proxy-config', type: 'Path', aliases: ['pc'] }, - { name: 'live-reload', type: Boolean, default: true, aliases: ['lr'] }, + { name: 'proxy-config', type: 'Path', aliases: ['pc'] }, + { name: 'live-reload', type: Boolean, default: true, aliases: ['lr'] }, { name: 'live-reload-host', type: String, @@ -66,9 +72,9 @@ const ServeCommand = Command.extend({ default: true, description: 'Whether to live reload CSS (default true)' }, - { name: 'ssl', type: Boolean, default: false }, - { name: 'ssl-key', type: String, default: 'ssl/server.key' }, - { name: 'ssl-cert', type: String, default: 'ssl/server.crt' }, + { name: 'ssl', type: Boolean, default: false }, + { name: 'ssl-key', type: String, default: 'ssl/server.key' }, + { name: 'ssl-cert', type: String, default: 'ssl/server.crt' }, { name: 'open', type: Boolean, @@ -84,9 +90,62 @@ const ServeCommand = Command.extend({ } ]), - run: function(commandOptions: ServeTaskOptions) { - return require('./serve.run').default.call(this, commandOptions); + run: function (commandOptions: ServeTaskOptions) { + const ServeTask = require('../tasks/serve').default; + + Version.assertAngularVersionIs2_3_1OrHigher(this.project.root); + commandOptions.liveReloadHost = commandOptions.liveReloadHost || commandOptions.host; + + return checkExpressPort(commandOptions) + .then(() => autoFindLiveReloadPort(commandOptions)) + .then((opts: ServeTaskOptions) => { + const serve = new ServeTask({ + ui: this.ui, + project: this.project, + }); + + return serve.run(opts); + }); } }); +function checkExpressPort(commandOptions: ServeTaskOptions) { + return getPort({ port: commandOptions.port, host: commandOptions.host }) + .then((foundPort: number) => { + + if (commandOptions.port !== foundPort && commandOptions.port !== 0) { + throw new SilentError( + `Port ${commandOptions.port} is already in use. Use '--port' to specify a different port.` + ); + } + + // otherwise, our found port is good + commandOptions.port = foundPort; + return commandOptions; + + }); +} + +function autoFindLiveReloadPort(commandOptions: ServeTaskOptions) { + return getPort({ port: commandOptions.liveReloadPort, host: commandOptions.liveReloadHost }) + .then((foundPort: number) => { + + // if live reload port matches express port, try one higher + if (foundPort === commandOptions.port) { + commandOptions.liveReloadPort = foundPort + 1; + return autoFindLiveReloadPort(commandOptions); + } + + // port was already open + if (foundPort === commandOptions.liveReloadPort) { + return commandOptions; + } + + // use found port as live reload port + commandOptions.liveReloadPort = foundPort; + return commandOptions; + + }); +} + export default ServeCommand; diff --git a/packages/@angular/cli/models/build-options.ts b/packages/@angular/cli/models/build-options.ts new file mode 100644 index 0000000000..786f1dcdf9 --- /dev/null +++ b/packages/@angular/cli/models/build-options.ts @@ -0,0 +1,17 @@ +export interface BuildOptions { + target?: string; + environment?: string; + outputPath?: string; + aot?: boolean; + sourcemap?: boolean; + vendorChunk?: boolean; + baseHref?: string; + deployUrl?: string; + verbose?: boolean; + progress?: boolean; + i18nFile?: string; + i18nFormat?: string; + locale?: string; + extractCss?: boolean; + outputHashing?: string; +} diff --git a/packages/@angular/cli/models/webpack-config.ts b/packages/@angular/cli/models/webpack-config.ts index 71f864b36d..5bd771fe1e 100644 --- a/packages/@angular/cli/models/webpack-config.ts +++ b/packages/@angular/cli/models/webpack-config.ts @@ -1,5 +1,6 @@ const webpackMerge = require('webpack-merge'); import { CliConfig } from './config'; +import { BuildOptions } from './build-options'; import { getCommonConfig, getDevConfig, @@ -11,24 +12,6 @@ import { const path = require('path'); -export interface BuildOptions { - target?: string; - environment?: string; - outputPath?: string; - aot?: boolean; - sourcemap?: boolean; - vendorChunk?: boolean; - baseHref?: string; - deployUrl?: string; - verbose?: boolean; - progress?: boolean; - i18nFile?: string; - i18nFormat?: string; - locale?: string; - extractCss?: boolean; - outputHashing?: string; -} - export interface WebpackConfigOptions { projectRoot: string; buildOptions: BuildOptions; diff --git a/packages/@angular/cli/tasks/init.ts b/packages/@angular/cli/tasks/init.ts new file mode 100644 index 0000000000..d8a8492715 --- /dev/null +++ b/packages/@angular/cli/tasks/init.ts @@ -0,0 +1,103 @@ +import * as chalk from 'chalk'; +import LinkCli from '../tasks/link-cli'; +import NpmInstall from '../tasks/npm-install'; +import { validateProjectName } from '../utilities/validate-project-name'; + +const Task = require('../ember-cli/lib/models/task'); +const Promise = require('../ember-cli/lib/ext/promise'); +const SilentError = require('silent-error'); +const normalizeBlueprint = require('../ember-cli/lib/utilities/normalize-blueprint-option'); +const GitInit = require('../tasks/git-init'); + + +export default Task.extend({ + run: function (commandOptions: any, rawArgs: string[]) { + if (commandOptions.dryRun) { + commandOptions.skipNpm = true; + } + + const installBlueprint = new this.tasks.InstallBlueprint({ + ui: this.ui, + project: this.project + }); + + // 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 + }); + } + + let npmInstall: any; + if (!commandOptions.skipNpm) { + npmInstall = new NpmInstall({ + ui: this.ui, + project: this.project + }); + } + + let linkCli: any; + if (commandOptions.linkCli) { + linkCli = new LinkCli({ + ui: this.ui, + project: this.project + }); + } + + const project = this.project; + const packageName = commandOptions.name !== '.' && commandOptions.name || project.name(); + + 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)); + } + + const blueprintOpts = { + dryRun: commandOptions.dryRun, + blueprint: 'ng2', + rawName: packageName, + targetFiles: rawArgs || '', + rawArgs: rawArgs.toString(), + sourceDir: commandOptions.sourceDir, + style: commandOptions.style, + prefix: commandOptions.prefix, + routing: commandOptions.routing, + inlineStyle: commandOptions.inlineStyle, + inlineTemplate: commandOptions.inlineTemplate, + ignoredUpdateFiles: ['favicon.ico'], + skipGit: commandOptions.skipGit, + skipTests: commandOptions.skipTests + }; + + validateProjectName(packageName); + + blueprintOpts.blueprint = normalizeBlueprint(blueprintOpts.blueprint); + + return installBlueprint.run(blueprintOpts) + .then(function () { + if (commandOptions.skipGit === false) { + return gitInit.run(commandOptions, rawArgs); + } + }) + .then(function () { + if (!commandOptions.skipNpm) { + return npmInstall.run(); + } + }) + .then(function () { + if (commandOptions.linkCli) { + return linkCli.run(); + } + }) + .then(() => { + this.ui.writeLine(chalk.green(`Project '${packageName}' successfully created.`)); + }); + } +}); + diff --git a/packages/@angular/cli/tasks/serve.ts b/packages/@angular/cli/tasks/serve.ts index 10458b4f99..f3fbe27933 100644 --- a/packages/@angular/cli/tasks/serve.ts +++ b/packages/@angular/cli/tasks/serve.ts @@ -2,21 +2,21 @@ import * as fs from 'fs'; import * as path from 'path'; import * as chalk from 'chalk'; import * as rimraf from 'rimraf'; -const SilentError = require('silent-error'); -const Task = require('../ember-cli/lib/models/task'); import * as webpack from 'webpack'; -const WebpackDevServer = require('webpack-dev-server'); +import * as url from 'url'; +import { oneLine, stripIndents } from 'common-tags'; import { getWebpackStatsConfig } from '../models/webpack-configs/utils'; import { NgCliWebpackConfig } from '../models/webpack-config'; import { ServeTaskOptions } from '../commands/serve'; import { CliConfig } from '../models/config'; -import { oneLine } from 'common-tags'; -import * as url from 'url'; -import {stripIndents} from 'common-tags'; + +const WebpackDevServer = require('webpack-dev-server'); +const Task = require('../ember-cli/lib/models/task'); +const SilentError = require('silent-error'); const opn = require('opn'); export default Task.extend({ - run: function(serveTaskOptions: ServeTaskOptions) { + run: function (serveTaskOptions: ServeTaskOptions) { const ui = this.ui; let webpackCompiler: any;