Polymer + dart2js:输出太大
Polymer + dart2js: too large output
我正在使用 dart2js(通过 pubspec),一个简单的例子在生成的构建(文件夹)中有太大的输出,11.4MB。
例如,我只使用 paper-input
元素的代码,但 build folder
中的内容包含各种聚合物元素。
生成小代码有什么具体需要做的吗?
遵循代码示例(Webstorms 中的默认设置):
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="scaffolded-by" content="https://github.com/google/stagehand">
<title>untitled12</title>
<!-- Add to homescreen for Chrome on Android -->
<meta name="mobile-web-app-capable" content="yes">
<link rel="icon" sizes="192x192" href="images/touch/chrome-touch-icon-192x192.png">
<!-- Add to homescreen for Safari on iOS -->
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="apple-mobile-web-app-title" content="Web Starter Kit">
<link rel="apple-touch-icon-precomposed" href="apple-touch-icon-precomposed.png">
<!-- Tile icon for Win8 (144x144 + tile color) -->
<meta name="msapplication-TileImage" content="images/touch/ms-touch-icon-144x144-precomposed.png">
<meta name="msapplication-TileColor" content="#3372DF">
<!-- example of using a paper element -->
<link rel="import" href="packages/polymer_elements/roboto.html">
<link rel="stylesheet" href="styles.css">
</head>
<body unresolved>
<main-app></main-app>
<script type="application/dart" src="index.dart"></script>
<script src="packages/browser/dart.js"></script>
</body>
</html>
main_app.html
<dom-module id="main-app">
<style>
:host {
display: block;
}
</style>
<template>
<paper-input label="Type something..." value="{{text}}"></paper-input>
<p>
Text: <span>{{text}}</span><br />
Reversed: <span>{{reverseText(text)}}</span>
</p>
</template>
</dom-module>
main_app.dart
@HtmlImport('main_app.html')
library untitled12.lib.main_app;
import 'dart:html';
import 'package:polymer_elements/paper_input.dart';
import 'package:polymer/polymer.dart';
import 'package:web_components/web_components.dart';
/// Uses [PaperInput]
@PolymerRegister('main-app')
class MainApp extends PolymerElement {
@property
String text;
/// Constructor used to create instance of MainApp.
MainApp.created() : super.created();
@reflectable
String reverseText(String text) {
return text.split('').reversed.join('');
}
}
pubspec.yaml
name: 'untitled12'
version: 0.0.1
description: A web app built using polymer.dart.
#author: Your Name <email@example.com>
#homepage: https://www.example.com
environment:
sdk: '>=1.9.0 <2.0.0'
dependencies:
browser: ^0.10.0
polymer_elements: ^1.0.0-rc.1
polymer: ^1.0.0-rc.2
reflectable: ^0.3.1
web_components: ^0.12.0
transformers:
- web_components:
entry_points: web/index.html
- reflectable:
entry_points: web/index.bootstrap.initialize.dart
- $dart2js:
$include: '**/*.bootstrap.initialize.dart'
minify: true
commandLineOptions:
- --trust-type-annotations
- --trust-primitives
这可能是因为 polymer_elements
包。今天只能对 dart 文件进行 treesaken,因此该包中的所有 html 和 js 文件都将出现在构建输出中。虽然当用户访问时,您的实际应用不会这么大,所以这通常不是问题。
今天的限制因素基本上是转换器的工作方式,只有 polymer_elements
包中的转换器可以在构建期间删除文件。但是,该转换器无法访问您的应用程序来确定实际使用了哪些文件。
今天唯一真正的解决方案是拥有自己的单独构建步骤,删除不必要的文件,但这几乎不值得付出努力。
我正在使用 dart2js(通过 pubspec),一个简单的例子在生成的构建(文件夹)中有太大的输出,11.4MB。
例如,我只使用 paper-input
元素的代码,但 build folder
中的内容包含各种聚合物元素。
生成小代码有什么具体需要做的吗?
遵循代码示例(Webstorms 中的默认设置):
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="scaffolded-by" content="https://github.com/google/stagehand">
<title>untitled12</title>
<!-- Add to homescreen for Chrome on Android -->
<meta name="mobile-web-app-capable" content="yes">
<link rel="icon" sizes="192x192" href="images/touch/chrome-touch-icon-192x192.png">
<!-- Add to homescreen for Safari on iOS -->
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="apple-mobile-web-app-title" content="Web Starter Kit">
<link rel="apple-touch-icon-precomposed" href="apple-touch-icon-precomposed.png">
<!-- Tile icon for Win8 (144x144 + tile color) -->
<meta name="msapplication-TileImage" content="images/touch/ms-touch-icon-144x144-precomposed.png">
<meta name="msapplication-TileColor" content="#3372DF">
<!-- example of using a paper element -->
<link rel="import" href="packages/polymer_elements/roboto.html">
<link rel="stylesheet" href="styles.css">
</head>
<body unresolved>
<main-app></main-app>
<script type="application/dart" src="index.dart"></script>
<script src="packages/browser/dart.js"></script>
</body>
</html>
main_app.html
<dom-module id="main-app">
<style>
:host {
display: block;
}
</style>
<template>
<paper-input label="Type something..." value="{{text}}"></paper-input>
<p>
Text: <span>{{text}}</span><br />
Reversed: <span>{{reverseText(text)}}</span>
</p>
</template>
</dom-module>
main_app.dart
@HtmlImport('main_app.html')
library untitled12.lib.main_app;
import 'dart:html';
import 'package:polymer_elements/paper_input.dart';
import 'package:polymer/polymer.dart';
import 'package:web_components/web_components.dart';
/// Uses [PaperInput]
@PolymerRegister('main-app')
class MainApp extends PolymerElement {
@property
String text;
/// Constructor used to create instance of MainApp.
MainApp.created() : super.created();
@reflectable
String reverseText(String text) {
return text.split('').reversed.join('');
}
}
pubspec.yaml
name: 'untitled12'
version: 0.0.1
description: A web app built using polymer.dart.
#author: Your Name <email@example.com>
#homepage: https://www.example.com
environment:
sdk: '>=1.9.0 <2.0.0'
dependencies:
browser: ^0.10.0
polymer_elements: ^1.0.0-rc.1
polymer: ^1.0.0-rc.2
reflectable: ^0.3.1
web_components: ^0.12.0
transformers:
- web_components:
entry_points: web/index.html
- reflectable:
entry_points: web/index.bootstrap.initialize.dart
- $dart2js:
$include: '**/*.bootstrap.initialize.dart'
minify: true
commandLineOptions:
- --trust-type-annotations
- --trust-primitives
这可能是因为 polymer_elements
包。今天只能对 dart 文件进行 treesaken,因此该包中的所有 html 和 js 文件都将出现在构建输出中。虽然当用户访问时,您的实际应用不会这么大,所以这通常不是问题。
今天的限制因素基本上是转换器的工作方式,只有 polymer_elements
包中的转换器可以在构建期间删除文件。但是,该转换器无法访问您的应用程序来确定实际使用了哪些文件。
今天唯一真正的解决方案是拥有自己的单独构建步骤,删除不必要的文件,但这几乎不值得付出努力。