【问题标题】:Error after compiling Polymer Dart to JS. (The "smoke" library has not been configured)将 Polymer Dart 编译为 JS 后出错。 (“smoke”库尚未配置)
【发布时间】:2015-07-06 05:08:14
【问题描述】:

在将 Dart 代码(使用 Dart Polymer)编译为 JS 之后。我收到以下错误:

Uncaught Exception: The "smoke" library has not been configured.
Make sure you import and configure one of the implementations
(package:smoke/mirrors.dart or package:smoke/static.dart).

有时消息是:

No elements registered in a while, but still waiting on 1 element to be registered. Check that you have a class with an @CustomTag annotation for each of the following tags: 'app-element'

这里有什么问题?这是我的代码:

更新:现在超出的代码得到了改进,并且在pub build 之后可以正常工作。我更改文件夹/文件结构并将聚合物更新到最新版本。

pubspec.yaml

name: app
dependencies:
  browser: any
  #do not forget update to latest version by running pub update 
  polymer: any
transformers:
- polymer:
    entry_points:
    - web/main.html

web/templates/ui-elements.html

<polymer-element name="app-globals"></polymer-element>

<polymer-element name="app-element">
  <template>
    <link rel="stylesheet" href="/main.css"/>
    <content></content>
  </template>
  <script type="application/dart" src="ui-elements.dart"></script>
</polymer-element>

web/templates/ui-elements.dart

@CustomTag('app-globals')
class AppGlobals extends PolymerElement{
  AppGlobals.created() : super.created();
}

@CustomTag('app-element')
class AppElement extends PolymerElement {
  AppElement.created() : super.created();
}

web/main.html(虚拟入口文件)

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  </head>
  <body>
    <app-element></app-element>
    <script type="application/dart" src="main.dart"></script>
  </body>
</html>

web/main.dart

import 'package:polymer/polymer.dart';

main() {
  initPolymer();
}

@whenPolymerReady
void onReady() {
}

web/main.html(入口点)在pub build 之后。编译后真是一团糟。这么多的 js 文件,有的甚至超过 300kb。

<!DOCTYPE html><html lang="en"><head><script src="packages/web_components/webcomponents.min.js"></script><script src="packages/web_components/dart_support.js"></script>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  </head>
  <body><div hidden=""><style shim-shadowdom="">
/*******************************
          Flex Layout
*******************************/

html /deep/ [layout][horizontal], html /deep/ [layout][vertical] {
  display: -ms-flexbox;
  display: -webkit-flex;
  display: flex;
}

html /deep/ [layout][horizontal][inline], html /deep/ [layout][vertical][inline] {
  display: -ms-inline-flexbox;
  display: -webkit-inline-flex;
  display: inline-flex;
}

......tons of other styles...........

</style>

<script src="packages/polymer/src/js/polymer/polymer.min.js"></script>

<script>
// TODO(sigmund): remove this script tag (dartbug.com/19650). This empty
// script tag is necessary to work around a bug in Chrome 36.
</script>

<!-- unminified for debugging:
<link rel="import" href="src/js/polymer/layout.html">
<script src="src/js/polymer/polymer.js"></script>
-->
<polymer-element name="app-globals"></polymer-element>

<!-- APP ELEMENT -->
<polymer-element name="app-element" class="bck-medusa w-100 h-100">
  <template>
    <link rel="stylesheet" href="../main.css">
    <content></content>
  </template>
</polymer-element>
</div>
    <script src="main.html.polymer.bootstrap.dart.js" async=""></script>


</body></html>

【问题讨论】:

    标签: dart dart-polymer dart-pub dart2js


    【解决方案1】:

    当您使用@whenPolymerReady 时,您不需要initPolymer。在您的示例中,整个 main() 方法是多余的。

    您是否在pubspec.yaml 的聚合物变压器配置中正确注册了您的入口页面?

    Smoke 需要一个变压器,但如果您正确配置了 Polymer 变压器,则包含 Smoke 变压器。

    【讨论】:

    • 我猜你至少需要为转换器提供一个虚拟入口页面。无需将生成的文件提供给服务器,但转换器使用它来查找 Dart 脚本的开始。您还可以将生成的条目页面用作自定义/生成的条目页面的模板(以检查是否包含所有必要的脚本标签和类似标签)。
    • 我认为应该这样做。我不确定输出中的脚本标签,很长一段时间没有检查它。我认为你需要 dart_support.js 脚本标签。
    • 我很确定您需要添加所有脚本标签,除非还有一个带有.dart 扩展名的标签,这可以毫无疑问地删除。
    • 我认为如果您在转换器中提供一个实际上并没有最终被提供的虚拟 html 文件,您会遇到问题。对于 html 导入,至少它们被转换器内联到文件中,然后在运行时忽略所有 @HtmlImport 注释。即使您不使用@HtmlImport,您部署的应用程序也不会得到充分优化(最终会为 html 导入执行大量额外的网络请求)。
    • 你的虚拟入口页面看起来如何(飞镖脚本标签)。您的 Polymer 变压器配置如何?我不知道dart_support.js 实际上做了什么,但最近有一个问题,添加它解决了一个问题(不记得是什么了) 这是一个例子,其中提到了一个 Polymer 元素不在 JS 中显示当脚本标签丢失时stackoverflow.com/questions/26856303
    猜你喜欢
    • 2016-02-21
    • 1970-01-01
    • 1970-01-01
    • 2016-07-27
    • 1970-01-01
    • 2014-01-01
    • 2016-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多