我试着理解如何使用具有不同于默认Pub / Dart结构的文件结构的聚合物(因此教程在这里没有帮助我)。我已阅读以下页面:
这是我的结构:
src/
controllers/, models/, views/ #Go related files
main.go #Go web server
static/ #CSS, Images, Dart
...
styles/
scripts/
packages/ #links to actual packages
web/
packages/ #link to ../packages
ui-elements.html
main.dart
pubspec.yaml
...
src / views / index.html - 网站的索引页
...
<head>
<link rel="import" href="scripts/web/ui-elements.html"/>
</head>
<body>
<ui-watch></ui-watch>
<!-- Does it should come first or after polymer/init.dart? -->
<script type="application/dart" src="scripts/web/main.dart"></script>
<!-- path doesn't resolve correctly so I commented it and place initialization into the main.dart file itself -->
<!--<script type="application/dart">export 'package:polymer/init.dart';</script>-->
<script src="scripts/packages/browser/dart.js"></script>
</body>
的src /静态/脚本/网络/ main.dart
import 'dart:html';
import 'dart:async';
import 'package:polymer/polymer.dart';
export 'package:polymer/init.dart';
@CustomTag('ui-watch')
class UIWatch extends PolymerElement {
@observable String counter = '00:00';
UIWatch.created() : super.created();
ButtonElement startWatch;
@override
void detached() {
super.detached();
}
}
main() {
initPolymer();
}
的src /静态/脚本/网络/ UI-elements.html
<link rel="import" href="packages/polymer/polymer.html">
<polymer-element name="ui-watch">
<template>
<div>{{counter}}</div>
<div>
<button id="startWatch">Start</button>
</div>
</template>
<!--<script type="application/dart" src="main.dart"></script>-->
</polymer-element>
跑完后,我得到以下内容:
GET http://localhost:8080/packages/polymer/polymer.html 404 (Not Found)
Error loading html import from path `polymer.html`
Found bad packages uri in html import. All packages uris should point to the
packages symlink in the same folder as the entry point.
Entry point: http://localhost:8080/
Owner document: http://localhost:8080/scripts/web/ui-elements.html
Current import: <link rel="import" href="packages/polymer/polymer.html">
#I've already try this path, but I got the same error
Corrected import: <link rel="import" href="../../packages/polymer/polymer.html">
For more information, please see:
https://www.dartlang.org/polymer/app-directories.html#into-a-non-dart-non-entry-point
warning: http://localhost:8080/packages/polymer/polymer.html not found.
这里有什么问题?我有点困惑如何组织这些文件..无论我尝试路径都没有正确解决。我认为,这里的问题之一就是我不明白聚合物/聚合物和聚合物/ init.dart实际上做了什么以及应该包含的顺序。
答案 0 :(得分:3)
那不行。如果您偏离pub包结构pub build
或pub serve
将无法创建可运行的Dart或JavaScript应用程序。
如果您希望您的go web服务器为Dart客户端提供服务,则只需要在Directory目录中提供构建输出即可提供静态内容,但不能提供Dart源文件。无论如何都不应该部署它们。
对于开发,您应该使用代理或修改您的go服务器作为代理,将所有与Dart相关的请求转发给pub serve
。
答案 1 :(得分:3)
此特定警告是关于html导入规范化。浏览器不知道符号链接,因此重要的是所有html导入都指向相同的packages
符号链接,否则文件将被加载两次并可能导致错误。
聚合物强制执行此操作的方式是要求packages
文件夹中的所有html导入文件都通过与您的应用程序入口点相同级别的packages
符号链接,在您的情况下看起来像src/static
。但是,pub不知道该文件夹,所以那里没有符号链接。
我从未尝试过此操作,但您可以尝试在packages
文件夹中创建名为src/static
的手动符号链接,并将其指向scripts/packages
。然后执行警告建议,并通过添加scripts/web/ui-elements.html
来更改../../
中的html导入。这样,您就可以将所有内容规范化为src/static/packages
的新符号链接。
这会产生一些其他有趣的副作用,因为你无法在聚合物变压器中列出你的实际入口点...虽然很难确切知道这可能会对事情产生什么影响,但却不知道你的应用程序的更多信息。