【问题标题】:Has anyone gotten the Dart dev_compiler to work?有没有人让 Dart dev_compiler 工作?
【发布时间】:2015-03-09 23:28:37
【问题描述】:

我想尝试使用生成 ES6 的 Dart 开发编译器。我安装了它

pub global activate -sgit git@github.com:dart-lang/dev_compiler.git

然后我创建了一个简单的 Dart 类:

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 ecmascript-6


【解决方案1】:

更新:

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

【讨论】:

  • 只是好奇,输出是什么样子的?
  • 将输出添加到我的答案中,我不确定如何准确使用它。比如 dart.Object 是从哪里来的?
  • 它来自:github.com/dart-lang/dev_compiler/blob/master/lib/runtime/… ... 但是使用 dev_compiler 还为时过早。核心库甚至不工作。只是想把那个免责声明扔出去。 :)
【解决方案2】:

时间还早。很多东西还不能工作(包括基本库),而且你看到的很多东西都会改变。

说了这么多,你可以看看:

https://github.com/dart-lang/dev_compiler/blob/master/test/sunflower/sunflower.html

了解事物是如何联系在一起的,您可以在 Chrome Canary 中运行(最终随着 ES 6 登陆更稳定的版本)。

【讨论】:

    猜你喜欢
    • 2011-10-02
    • 1970-01-01
    • 2010-09-14
    • 1970-01-01
    • 2019-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多