dart - 是否可以转换已编译的 javascript,并配置运行转换器的顺序?

标签 dart dart-pub

我有一个不太典型的酒吧变压器用例,所以我想知道它是否可行。我想单独 gzip 在 pub 构建期间生成的每个 css、html 和 javascript 文件。我有两个问题:

  • 是否可以转换已编译的 javascript?
  • 是否可以配置变压器运行的顺序?显然,gzip 转换器需要是最后运行的转换器。

如果您想知道我为什么要这样做,我是通过 S3 提供我的应用程序的,它不支持即时 gzip 压缩。我认为 pub transformers 是最合适的地方。

最佳答案

您可以通过转换器的行位置指定顺序:

transformers:
  - $dart2js
  - YourGzipTransformer

以上指定您希望 dart2js 转换器在 YourGzipTransformer 之前运行,从而使 YourGzipTransformer 可以访问 dart2js 生成的 Javascript 文件。如果您交换了顺序,或者没有指定 dart2js 转换器的顺序,YourGzipTransformer 将在它之前运行并且无法访问已编译的 Javascript。

如果您不关心某些转换器的运行顺序,您也可以指定它:

transformers:
  - [$dart2js, SomeOtherTransformer]
  - YourGzipTransformer

您可以在 Assets and Transformers article 中阅读更多相关信息.

这是一个基本的转换器,它将生成每个 CSS、HTML 和 Javascript 文件的 gzip 版本:

import 'dart:io';
import 'package:barback/barback.dart';

class GzipTransformer extends Transformer {
  final BarbackSettings _settings;

  GzipTransformer.asPlugin(this._settings);

  @override
  Future apply(Transform transform) {
    return transform.primaryInput.readAsString().then((content) {
        var id = transform.primaryInput.id;
        var gzipId = id.changeExtension(id.extension +".gzip");

        var gzippedContent = GZIP.encode(content.codeUnits);
        transform.addOutput(new Asset.fromBytes(gzipId, gzippedContent));
      });
  }

  String get allowedExtensions => ".js .css .html";

}

关于dart - 是否可以转换已编译的 javascript,并配置运行转换器的顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24522204/

相关文章:

flutter - 带编舞(11277) : Frame time is 13. 988632 ms future !检查图形 HAL 是否使用正确的时基生成 vsync 时间戳

dart - 酒馆包名争议

dart - 来自pub的软件包未正确安装

dart - 如何使用 TextPainter 绘制文本?

switch-statement - 在 Dart 中切换失败

dart - 如何修复类型 'Future<dynamic>' 不是类型 'String' Flutter 的子类型

flutter - 在 dart 中将 int 转换为 bool

dart - 放 Dart 包 Assets 的位置

dart - 如何在Dart Pub包管理器中访问命令行

dart - 具有测试依赖项的 Pub Transformer