Chromium Code Reviews| Index: bin/dartdevc.dart |
| diff --git a/bin/dartdevc.dart b/bin/dartdevc.dart |
| index 31fe287f30c5c9ece72b10eb6cfa92d74b89fd40..bc4c219ad971a86a7aaa836ca7f3b5fe55ababdd 100755 |
| --- a/bin/dartdevc.dart |
| +++ b/bin/dartdevc.dart |
| @@ -1,46 +1,78 @@ |
| #!/usr/bin/env dart |
| -// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
| +// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| -/// Runs dev_compiler's checker, and optionally the code generator. |
| -/// Also can run a server for local development. |
| -library dev_compiler.bin.dartdevc; |
| +/// Command line entry point for Dart Development Compiler (dartdevc). |
| +/// |
| +/// Supported commands are |
| +/// * compile: builds a collection of dart libraries into a single JS module |
| +/// |
| +/// Additionally, these commands are being considered |
| +/// * link: combines several JS modules into a single JS file |
| +/// * build: compiles & links a set of code, automatically determining |
| +/// appropriate groupings of libraries to combine into JS modules |
| +/// * watch: watch a directory and recompile build units automatically |
| +/// * serve: uses `watch` to recompile and exposes a simple static file server |
| +/// for local development |
| +/// |
| +/// These commands are combined so we have less names to expose on the PATH, |
| +/// and for development simplicity while the precise UI has not been determined. |
| +/// |
| +/// A more typical structure for web tools is simply to have the compiler with |
| +/// "watch" as an option. The challenge for us is: |
| +/// |
| +/// * Dart used to assume whole-program compiles, so we don't have a |
| +/// user-declared unit of building, and neither "libraries" or "packages" will |
| +/// work, |
| +/// * We do not assume a `node` JS installation, so we cannot easily reuse |
| +/// existing tools such as for the "link" step, or assume users have a local |
|
vsm
2016/04/14 00:18:24
such as ??? for link step?
Jennifer Messerly
2016/04/14 18:28:40
I was thinking of webpack: https://webpack.github.
|
| +/// file server, |
| +/// * We didn't have a file watcher API at first, |
| +/// * We had no conventions about where compiled output should go (or even |
| +/// that we would be compiling at all, vs running on an in-browser Dart VM), |
| +/// * We wanted a good first impression with our simple examples, so we used |
| +/// local file servers, and users have an expectation of it now, even though |
| +/// it doesn't scale to typical apps that need their own real servers. |
| import 'dart:io'; |
| +import 'package:args/command_runner.dart'; |
| +import 'package:dev_compiler/src/compiler/command.dart'; |
| -import 'package:dev_compiler/devc.dart' show devCompilerVersion; |
| -import 'package:dev_compiler/src/compiler.dart' |
| - show validateOptions, compile, setupLogger; |
| -import 'package:dev_compiler/src/options.dart'; |
| - |
| -const String _appName = 'dartdevc'; |
| - |
| -void _showUsageAndExit() { |
| - print('usage: dartdevc [<options>] <file.dart>...\n'); |
| - print('<file.dart> is one or more Dart files to process.\n'); |
| - print('<options> include:\n'); |
| - print(argParser.usage); |
| - exit(1); |
| -} |
| - |
| -main(List<String> args) { |
| - var options; |
| - |
| +main(List<String> args) async { |
| + var runner = new CommandRunner('dartdevc', 'Dart Development Compiler'); |
| + runner.addCommand(new CompileCommand()); |
| try { |
| - options = validateOptions(args); |
| - } on FormatException catch (e) { |
| - print('${e.message}\n'); |
| - _showUsageAndExit(); |
| - } |
| - |
| - if (options == null || options.help) _showUsageAndExit(); |
| - if (options.version) { |
| - print('${_appName} version ${devCompilerVersion}'); |
| - exit(0); |
| + await runner.run(args); |
| + } on UsageException catch (e) { |
| + // Incorrect usage, input file not found, etc. |
| + print(e); |
| + exit(64); |
| + } on CompileErrorException catch (e) { |
| + // Code has error(s) and failed to compile. |
| + print(e); |
| + exit(1); |
| + } catch (e, s) { |
| + // Anything else is likely a compiler bug. |
| + // |
| + // --unsafe-force-compile is a bit of a grey area, but it's nice not to |
| + // crash while compiling |
| + // (of course, output code may crash, if it had errors). |
| + // |
| + print(""); |
| + print("We're sorry, you've found a bug in our compiler."); |
| + print("You can report this bug at:"); |
| + print(" https://github.com/dart-lang/dev_compiler/issues"); |
| + print(""); |
| + print("Please include the information below in your report, along with"); |
| + print("any other information that may help us track it down. Thanks!"); |
| + print(""); |
| + print(" dartdevc arguments: " + args.join(' ')); |
| + print(" dart --version: ${Platform.version}"); |
| + print(""); |
| + print("```"); |
| + print(e); |
| + print(s); |
| + print("```"); |
| } |
| - |
| - setupLogger(options.logLevel, print); |
| - bool success = compile(options); |
| - exit(success ? 0 : 1); |
| } |