【问题标题】:Locating source of error when compiling dart polymer编译飞镖聚合物时定位错误源
【发布时间】:2014-03-06 15:02:13
【问题描述】:

我正在编译一个用 dart 和 polymer 编写的网站,遇到了一个错误,(见下面的堆栈跟踪,很长,但不是很有用)。如堆栈跟踪所示,当聚合物转换器尝试从 html 导入(在 MY_APP.html 中)内联聚合物元素定义时发生错误。

如果我在 MY_APP.html 中只有 2 个自定义元素,我会将其中一个注释掉,看看问题是否仍然存在,问题是我有大约 20 个,一个一个尝试它们既无聊又无聊耗时,有什么想法可以确定导致问题的自定义元素吗?

谢谢。

堆栈跟踪:

... (OMITTED)
Build error:
Transform polymer (ImportInliner) on MY_PACKAGE_NAME|web/MY_APP.html threw error: The null object does not have a method '[]'.

NoSuchMethodError : method not found: '[]'
Receiver: null
Arguments: [1]
dart:core-patch/object_patch.dart 45                                          Object.noSuchMethod
dart:core/uri.dart 124                                                        Uri.Uri._fromMatch
dart:core/uri.dart 121                                                        Uri.parse
http://127.0.0.1:36562/packages/polymer/src/build/import_inliner.dart 177:24  _UrlNormalizer._newUrl
http://127.0.0.1:36562/packages/polymer/src/build/import_inliner.dart 169:41  _UrlNormalizer.visitElement
http://127.0.0.1:36562/packages/html5lib/dom_parsing.dart 12:50               TreeVisitor.visit
http://127.0.0.1:36562/packages/html5lib/dom_parsing.dart 24:49               TreeVisitor.visitChildren
http://127.0.0.1:36562/packages/html5lib/dom_parsing.dart 30:48               TreeVisitor.visitNodeFallback
http://127.0.0.1:36562/packages/html5lib/dom_parsing.dart 39:50               TreeVisitor.visitElement
http://127.0.0.1:36562/packages/polymer/src/build/import_inliner.dart 173:23  _UrlNormalizer.visitElement
http://127.0.0.1:36562/packages/html5lib/dom_parsing.dart 12:50               TreeVisitor.visit
http://127.0.0.1:36562/packages/html5lib/dom_parsing.dart 24:49               TreeVisitor.visitChildren
http://127.0.0.1:36562/packages/html5lib/dom_parsing.dart 30:48               TreeVisitor.visitNodeFallback
http://127.0.0.1:36562/packages/html5lib/dom_parsing.dart 39:50               TreeVisitor.visitElement
http://127.0.0.1:36562/packages/polymer/src/build/import_inliner.dart 173:23  _UrlNormalizer.visitElement
http://127.0.0.1:36562/packages/html5lib/dom_parsing.dart 12:50               TreeVisitor.visit
http://127.0.0.1:36562/packages/html5lib/dom_parsing.dart 24:49               TreeVisitor.visitChildren
http://127.0.0.1:36562/packages/html5lib/dom_parsing.dart 30:48               TreeVisitor.visitNodeFallback
http://127.0.0.1:36562/packages/html5lib/dom_parsing.dart 39:50               TreeVisitor.visitElement
http://127.0.0.1:36562/packages/polymer/src/build/import_inliner.dart 173:23  _UrlNormalizer.visitElement
http://127.0.0.1:36562/packages/html5lib/dom_parsing.dart 12:50               TreeVisitor.visit
http://127.0.0.1:36562/packages/html5lib/dom_parsing.dart 24:49               TreeVisitor.visitChildren
http://127.0.0.1:36562/packages/html5lib/dom_parsing.dart 30:48               TreeVisitor.visitNodeFallback
http://127.0.0.1:36562/packages/html5lib/dom_parsing.dart 39:50               TreeVisitor.visitElement
http://127.0.0.1:36562/packages/polymer/src/build/import_inliner.dart 173:23  _UrlNormalizer.visitElement
http://127.0.0.1:36562/packages/html5lib/dom_parsing.dart 12:50               TreeVisitor.visit
http://127.0.0.1:36562/packages/html5lib/dom_parsing.dart 24:49               TreeVisitor.visitChildren
http://127.0.0.1:36562/packages/html5lib/dom_parsing.dart 30:48               TreeVisitor.visitNodeFallback
http://127.0.0.1:36562/packages/html5lib/dom_parsing.dart 39:50               TreeVisitor.visitElement
http://127.0.0.1:36562/packages/polymer/src/build/import_inliner.dart 173:23  _UrlNormalizer.visitElement
http://127.0.0.1:36562/packages/html5lib/dom_parsing.dart 12:50               TreeVisitor.visit
http://127.0.0.1:36562/packages/html5lib/dom_parsing.dart 24:49               TreeVisitor.visitChildren
http://127.0.0.1:36562/packages/html5lib/dom_parsing.dart 30:48               TreeVisitor.visitNodeFallback
http://127.0.0.1:36562/packages/html5lib/dom_parsing.dart 39:50               TreeVisitor.visitElement
http://127.0.0.1:36562/packages/polymer/src/build/import_inliner.dart 173:23  _UrlNormalizer.visitElement
http://127.0.0.1:36562/packages/html5lib/dom_parsing.dart 12:50               TreeVisitor.visit
http://127.0.0.1:36562/packages/html5lib/dom_parsing.dart 24:49               TreeVisitor.visitChildren
http://127.0.0.1:36562/packages/html5lib/dom_parsing.dart 30:48               TreeVisitor.visitNodeFallback
http://127.0.0.1:36562/packages/html5lib/dom_parsing.dart 32:52               TreeVisitor.visitDocument
http://127.0.0.1:36562/packages/html5lib/dom_parsing.dart 16:52               TreeVisitor.visit
http://127.0.0.1:36562/packages/polymer/src/build/import_inliner.dart 148:48  ImportInliner._collectImportedDocuments.<fn>.<fn>
dart:async/zone.dart 717                                                      _rootRunUnary
dart:async/zone.dart 854                                                      _RootZone.runUnary
dart:async/future_impl.dart 439                                               _Future._propagateToListeners.handleValueCallback
dart:async/future_impl.dart 522                                               _Future._propagateToListeners
dart:async/future_impl.dart 303                                               _Future._complete
dart:async/future.dart 286                                                    Future.forEach.nextElement
dart:async/zone.dart 717                                                      _rootRunUnary
dart:async/zone.dart 854                                                      _RootZone.runUnary
dart:async/future_impl.dart 439                                               _Future._propagateToListeners.handleValueCallback
dart:async/future_impl.dart 522                                               _Future._propagateToListeners
dart:async/future_impl.dart 303                                               _Future._complete
dart:async/future_impl.dart 354                                               _Future._asyncComplete.<fn>
dart:async/schedule_microtask.dart 23                                         _asyncRunCallbackLoop
dart:async/schedule_microtask.dart 32                                         _asyncRunCallback
dart:isolate-patch/isolate_patch.dart 119                                     _RawReceivePortImpl._handleMessage

../../home/MY_USER_NAME/dart/dart/sdk/lib/_internal/pub/lib/src/barback/load_transformers.dart 560  _call.<fn>
dart:isolate                                                                                 _RawReceivePortImpl._handleMessage
... (OMITTED)

【问题讨论】:

    标签: dart dart-polymer


    【解决方案1】:

    错误来自一个自定义元素:

    <a href="/blah/{{observableMap['my_key']}}">blah</a>
    

    在里面,改成:

    <a href="{{'/blah/' + observableMap['my_key']}}">blah</a>
    

    编译器很高兴。 (这是一个错误吗?)

    对于那些有类似问题的人:我能够通过修改 common.dart 和 import_inliner.dart(在包聚合物中)来添加更多日志输出来定位有问题的代码。

    【讨论】:

    • 我认为这是一个错误。前段时间我也遇到过这个问题,但没有构建失败。对我来说,这已经在 Dartium 中失败了('{{'之前的字符串无限重复)
    【解决方案2】:

    我最近还没有看到这样的错误。

    我发现的是

    相似但不一样...

    我在你之前的问题中看到你使用了一个有点不寻常的应用程序布局(在我看来)。 文件夹结构很好,但没有使用过也没有见过元素的 HTML 和 Dart 文件位于不同文件夹中的结构。

    我用

    • index.html 和 index.dart 在网络中
    • element1.html 和 element1.dart 在 lib 中的某个位置(每个聚合物元素一个 html 和一个 dart 文件)。
    • 有时当一个元素更复杂并且有一些功能拆分为额外的元素时,我会将所有属于一起的文件打包在一个子目录中,如lib/element1 或lib/components/element1

    上面的链接问题是由元素的导入方式引起的,尤其是当一个元素导入另一个元素时。
    元素导入仍然很脆弱。在 Dart/Dartium 中,多个路径指向一个元素,因为存在符号链接,但在构建到 JavaScript 时,仅支持一种方式。
    见https://code.google.com/p/dart/issues/detail?id=15953
    改进这项工作正在进行中(据我所知)。

    您组织代码的方式可能可行,但我没有这方面的经验。

    【讨论】:

    • 我的自定义元素html和dart文件在同一个文件夹,即web/polymer/。这是我的第一个 dart 项目,Pub Package Layout Conventions 对这种事情没有多说。将组件放到lib/ 或asset/,只留下入口点 html 和 dart(以及 css 以及图像)在 web 中看起来更好。
    • 仅供参考:资产已弃用。组件应该在 lib 和 web 中工作
    猜你喜欢
    • 2014-03-15
    • 2013-08-24
    • 1970-01-01
    • 2014-10-05
    • 1970-01-01
    • 2014-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多