有人让 Dart dev_compiler 工作了吗?
Has anyone gotten the Dart dev_compiler to work?
我想尝试使用生成 ES6 的 Dart 开发编译器。我安装了它
pub global activate -sgit git@github.com:dart-lang/dev_compiler.git
然后我创建了一个简单的 Dart class:
library wat;
class Person {
String first_name;
String last_name;
int amountOfAwesomeness;
Person(this.first_name, this.last_name, [this.amountOfAwesomeness = 0]);
String get name => "$first_name $last_name is awesome:$amountOfAwesomeness";
}
然后我尝试编译它:
dartdev -o ./ person.dart
但我得到一个例外:
Unhandled exception:
'package:dev_compiler/src/dependency_graph.dart': Failed assertion: line 60 pos 16: 'false' is not true.
#0 _AssertionError._throwNew (dart:core-patch/errors_patch.dart:27)
#1 SourceGraph.nodeFromUri.<anonymous closure> (package:dev_compiler/src/dependency_graph.dart:60:16)
#2 _CompactLinkedHashMap.putIfAbsent (dart:collection-patch/compact_hash.dart:193)
#3 SourceGraph.nodeFromUri (package:dev_compiler/src/dependency_graph.dart:50:29)
#4 Compiler.Compiler (package:dev_compiler/devc.dart:76:38)
#5 main (http://localhost:60878/devc.dart:42:22)
#6 _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:253)
#7 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:142)
看起来像这样的简单示例应该可行。我究竟做错了什么? dev_compiler 还没有准备好试用吗?
更新:
dart 开发编译器正在 Dart 版本 1.24 中内置到 pub 中。看这里https://github.com/dart-lang/sdk/blob/master/CHANGELOG.md#tool-changes-1
如果你想使用它,只需使用 Dart 1.24 并在你的 pubspec.yaml 中添加以下内容
web:
compiler:
debug: dartdevc # Use DDC for pub serve
release: dartdevc # Use DDC for pub build
原创:
在我开始工作后回答我自己的问题。上面的主要问题是输出目录。如果您不指定输出目录,它似乎什么都不做。因此,您必须为输出目录指定一个名称。当前目录显然不起作用。绝对路径似乎确实有效。
有效的例子:
dartdevc -o mydir input.dart
dartdevc -o /path/to/dir input.dart
无效示例:
dartdevc -o ./ input.dart
上面例子的输出是:
var person;
(function(exports) {
'use strict';
class Person extends dart.Object {
Person(first_name, last_name, amountOfAwesomeness) {
if (amountOfAwesomeness === void 0)
amountOfAwesomeness = 0;
this.first_name = first_name;
this.last_name = last_name;
this.amountOfAwesomeness = amountOfAwesomeness;
}
get name() {
return `${this.first_name} ${this.last_name} is awesome: ${this.amountOfAwesomeness}`;
}
}
// Exports:
exports.Person = Person;
})(person || (person = {}));
//# sourceMappingURL=person.js.map
太早了。很多东西还不能用(包括基本库),你看到的很多东西都会改变。
话虽如此,你可以看看:
https://github.com/dart-lang/dev_compiler/blob/master/test/sunflower/sunflower.html
了解事物是如何联系在一起的,您可以 运行 在 Chrome Canary(以及最终更稳定的版本,因为 ES 6 登陆)。
我想尝试使用生成 ES6 的 Dart 开发编译器。我安装了它
pub global activate -sgit git@github.com:dart-lang/dev_compiler.git
然后我创建了一个简单的 Dart class:
library wat;
class Person {
String first_name;
String last_name;
int amountOfAwesomeness;
Person(this.first_name, this.last_name, [this.amountOfAwesomeness = 0]);
String get name => "$first_name $last_name is awesome:$amountOfAwesomeness";
}
然后我尝试编译它:
dartdev -o ./ person.dart
但我得到一个例外:
Unhandled exception:
'package:dev_compiler/src/dependency_graph.dart': Failed assertion: line 60 pos 16: 'false' is not true.
#0 _AssertionError._throwNew (dart:core-patch/errors_patch.dart:27)
#1 SourceGraph.nodeFromUri.<anonymous closure> (package:dev_compiler/src/dependency_graph.dart:60:16)
#2 _CompactLinkedHashMap.putIfAbsent (dart:collection-patch/compact_hash.dart:193)
#3 SourceGraph.nodeFromUri (package:dev_compiler/src/dependency_graph.dart:50:29)
#4 Compiler.Compiler (package:dev_compiler/devc.dart:76:38)
#5 main (http://localhost:60878/devc.dart:42:22)
#6 _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:253)
#7 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:142)
看起来像这样的简单示例应该可行。我究竟做错了什么? dev_compiler 还没有准备好试用吗?
更新:
dart 开发编译器正在 Dart 版本 1.24 中内置到 pub 中。看这里https://github.com/dart-lang/sdk/blob/master/CHANGELOG.md#tool-changes-1
如果你想使用它,只需使用 Dart 1.24 并在你的 pubspec.yaml 中添加以下内容
web:
compiler:
debug: dartdevc # Use DDC for pub serve
release: dartdevc # Use DDC for pub build
原创:
在我开始工作后回答我自己的问题。上面的主要问题是输出目录。如果您不指定输出目录,它似乎什么都不做。因此,您必须为输出目录指定一个名称。当前目录显然不起作用。绝对路径似乎确实有效。
有效的例子:
dartdevc -o mydir input.dart
dartdevc -o /path/to/dir input.dart
无效示例:
dartdevc -o ./ input.dart
上面例子的输出是:
var person;
(function(exports) {
'use strict';
class Person extends dart.Object {
Person(first_name, last_name, amountOfAwesomeness) {
if (amountOfAwesomeness === void 0)
amountOfAwesomeness = 0;
this.first_name = first_name;
this.last_name = last_name;
this.amountOfAwesomeness = amountOfAwesomeness;
}
get name() {
return `${this.first_name} ${this.last_name} is awesome: ${this.amountOfAwesomeness}`;
}
}
// Exports:
exports.Person = Person;
})(person || (person = {}));
//# sourceMappingURL=person.js.map
太早了。很多东西还不能用(包括基本库),你看到的很多东西都会改变。
话虽如此,你可以看看:
https://github.com/dart-lang/dev_compiler/blob/master/test/sunflower/sunflower.html
了解事物是如何联系在一起的,您可以 运行 在 Chrome Canary(以及最终更稳定的版本,因为 ES 6 登陆)。