【问题标题】:dart vm works but dart2js failsdart vm 工作,但 dart2js 失败
【发布时间】:2014-01-21 18:44:02
【问题描述】:

我正在做聚合物飞镖。 dart vm 一切正常,但是当我尝试部署它时,它失败了(编译没问题。)当我运行构建的 js 版本时。它给了我错误

未捕获的类型错误:无法调用 null 的方法 'shL'

我试图跟踪编译后的 js 代码,似乎是由于查询了一个尚未在文档中的元素(它在 html 文件中,但不知何故,当时只加载了文档的头部。) 由于它是编译版本,因此很难追踪哪个部分出错了。此外,dart vm 和 dart2js 中没有错误。

有谁知道为什么会这样或者我做错了什么?

PS。我认为要让 dart 更受欢迎,至少 dart2js 编译器必须像代码在 vm 上运行良好时一样稳定,在 js 版本中运行良好。让开发人员尝试对编译后的 js 代码进行调试真的很烦人。 谢谢, 易

==更新==

这是 html 文件(在构建之前)

<html>
  <head>
    <meta charset="utf-8">
    <title>Sample app</title>
    <link rel="stylesheet" href="myHtml.css">

    <link rel="import" href="template/my-element.html">
    <script type="application/dart">export 'main.dart';</script>
    <script src="packages/browser/dart.js"></script>
  </head>
  <body>

        <my-element id="myElement" class="myElement" numOfRow="3"></my-element>

  </body>
</html>

【问题讨论】:

  • 没有足够的信息来提供帮助。请提供您如何在 HTML 文件中包含 Dart/JS 文件的粗略大纲。

标签: dart dart-polymer dart2js


【解决方案1】:

这个问题通常是由聚合物表达式访问由pub builds tree-shaking 删除的属性引起的。 Tree-shaking 保留了在某处引用的所有代码,但尚未考虑聚合物表达式。 如果您在使用选项 debug pub build --mode=debug 运行构建时您的项目可以正常工作,那么很可能就是这个原因。

如果删除的字段/方法在您控制的代码中,则只需添加注释@reflectable@observable@published 之一即可解决此问题。 如果是s third party code (SDK or some 3rd-party library) you can import 'dart:mirrors' and annotate it with@MirrorsUsed(options)`,其中的选项列表成员tree-shaking应该保留。

【讨论】:

    【解决方案2】:

    我发现我的原始代码中有两个问题。 1.我不应该在加载正文之前加载主脚本,我认为这在飞镖页面的一些示例代码中也是错误的。 2. 我认为 initPolymer() 不会同步初始化元素。因此,如果我在 initPolymer 之后调用元素的方法,它就找不到该方法。

    我修复了 1。但是,我不知道如何修复 2。我尝试了 initPolymer().run(),它也不起作用。如果有人知道如何解决它,请告诉我。

    谢谢, 易

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-14
      • 2011-07-14
      • 2020-09-16
      • 2012-06-07
      • 1970-01-01
      • 2014-01-10
      • 2013-08-24
      相关资源
      最近更新 更多