Typescript 和 Google 关闭

2024-02-21

我使用 Typescript 命令 (tsc) 创建一个包含所有平台类的 Javascript 文件。

tsc "./Main.ts" -out "./script/myProject_debug.js" --declarations

然后,我想用 Google Closure (compiler.jar) 混淆这个文件,如下所示:

java -jar ./compiler/compiler.jar --compilation_level ADVANCED_OPTIMIZATIONS --js "./script/myProject_debug.js" > "./script/myProject.js".

但是,当我执行生成的混淆/优化代码时,出现以下错误:未捕获的类型错误:无法读取未定义的属性“原型”

它匹配以下非混淆的 JS 代码(由 tsc 命令生成):

var __extends = this.__extends || function (d, b) {
    function __() { this.constructor = d; }
    __.prototype = b.prototype;
    d.prototype = new __();
}

这部分用于翻译“extends”Typescript 关键字,而 b 的等效项未定义。

有没有人遇到类似的错误或/并获得解决方案,以便能够使用 Typescript 编译文件来混淆 Google Closure?

我尝试使用 uglifyjs 命令,输出文件工作正常,但我想要完全混淆(类、参数、变量、方法等)。此外,Google Closure 提供的额外优化也将受到欢迎。

感谢您!


的定义__extends存在很可能导致您看到的错误的问题。

var __extends = this.__extends || function (d, b) { ... };

The this.__extends参考的含义与window.__extends,但是闭包编译器不知道(或者甚至尝试)意识到对this在全球范围内实际上是window目的。编译为--warning_level=VERBOSE编译器将发出警告:

Dangerous use of the global this object at line 1 character 16
var __extends = this.__extends || function (d, b) {
                ^

除此之外this.__extends是对外部/未定义属性的引用,编译器也会对此发出警告VERBOSE level.

我已经修改并注释了定义,以便在没有警告的情况下使用闭包编译器服务 UI http://closure-compiler.appspot.com/home:

// ==ClosureCompiler==
// @compilation_level ADVANCED_OPTIMIZATIONS
// @warning_level VERBOSE
// @output_file_name default.js
// @formatting pretty_print
// ==/ClosureCompiler==

var __extends = window['__extends'] || function (d, b) {
  /** @constructor */
  function __() { this.constructor = d; }
  __.prototype = b.prototype;
  d.prototype = new __();
}

/**
 * @constructor
 * @extends {String}
 */
function foo2() {this.foo = 'bar'; }
__extends(foo2, String);

var bar2 = new foo2;
alert(bar2.toLowerCase);

修改编译后的代码的 JSFiddle http://jsfiddle.net/wXBLB/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Typescript 和 Google 关闭 的相关文章

随机推荐

  • 在哪里可以找到 MATLAB 的形式语法?

    我想编写一个词法分析器生成器 将 MATLAB 语言的基本子集转换为 C C 等 为了帮助我做到这一点 我想找到一个包含 MATLAB 形式语法的文档 花了一些时间调查这一点 Mathworks 似乎没有提供这一点 有谁知道我在哪里可以找到
  • 如何在 iOS 中验证美国或加拿大的邮政编码?

    我想知道有什么方法可以验证美国或加拿大的邮政编码吗 我尝试使用正则表达式 就像美国一样 BOOL validateZip NSString candidate NSString emailRegex 5 4 ABCEGHJKLMNPRSTV
  • 可以跳过幼儿园吗?

    如果我知道某个值可能会在第一次遇到垃圾收集器时幸存下来 是否有某种方法让 GHC 知道 以便它可以直接将其分配到托儿所之外的某个地方 例如 如果我用一堆较小的部件建造一个大型结构 我知道每个部件至少会持续到整个结构完成为止 In GHC 垃
  • Angular 6 材料 - 如何从 matDatepicker 获取日期和时间?

    我的 html 中有这段代码
  • 如何以编程方式设置 BIRT 报告的数据源?

    我有一个连接到我们的测试数据库的 BIRT 报告 在生产环境中 我想提供一个由容器通过 jndi 提供的数据源 如何以编程方式为给定报告设置数据源 IReportRunnable design birtEngine openReportDe
  • .NET Core 2.2 CORS 不允许请求

    我已经检查了其他几个与此有关的线程 但仍然无法弄清楚这一点 我希望允许任何来源 标头 方法等访问我的 NET Core 2 2 API public void ConfigureServices IServiceCollection ser
  • python 如何解码http响应

    我正在使用下面的代码登录并从 api 端点检索数据 但响应似乎已编码 我无法读取内容 我正在使用请求 requests 0 0 1 import requests import json import os http proxy http
  • 如何使用 Chartjs 绘制带有基于时间的 x 轴的单行彩色条

    我有一些基于时间的数据 我想要图形表示 并希望使用 Chartjs 来绘制它 数据如下所示 Time State 7am up 9am down 10 45am out 17 35 up 另外 每个 状态 都有自己的颜色 所以在使用条形图时
  • Laravel:PHPUnit 导致所有内容出现 404

    我正在尝试使用 PHPUnit 为我的 Laravel 应用程序运行一些基本的单元测试 然而 所有 HTTP 请求都会返回 404 not find HTTP 状态代码 因此我们在第一个障碍上失败了 在互联网上搜寻后 我找到了有关如何解决此
  • 在 Java 中将 JSON 响应转换为字符串?

    当我向 api 发出 API 请求时 我收到 JSON 格式的响应 当我这样做时我得到了这个System Out Println的响应 HTTP 1 1 200 OK Date Thu 04 Oct 2012 20 33 18 GMT Se
  • 无法加载可部署 .jar 中的主类

    我正在尝试构建一个可执行的 jar 并收到错误Error Could not find or load main class com company app Main 我已经重新启动了我的电脑并尝试清理这个项目 我也尝试过使用
  • 如何使用 Spring Boot 2.1 Webflux 定制 Netty?

    我想在我的 Spring Boot Webflux 项目中自定义 Netty 在我的 POM 中 我添加了 Spring Boot Webflux 和 Spring Boot Actuator 依赖项 接下来 我重写了 WebServerF
  • 为什么在大多数用户代理默认样式表中
    的字体大小比

    小?

    The default h5 and h6 章节标题 https www w3 org TR html5 rendering html sections and headingsHTML5 中的字体大小为0 83em and 0 67em

  • 如何在 Web 服务调用中输入凭据(授权对象)?

    我听从了建议此处提供 https stackoverflow com questions 14532299 how to design a soap call in matlab它就像一个魅力 现在 我正在连接到服务器并调用名为的方法获取功
  • 如何在 PL/SQL 中以编程方式设置表名称?

    我创建了以下简单的 PL SQL 存储过程示例来提出特定问题 此过程将员工姓名和 ID 号插入到名为的表中employees 这 下面解释 PROCEDURE hire employee emp id IN INTEGER name IN
  • 导航抽屉中的 SeekBar

    我想在导航抽屉中使用搜索栏 基本上我需要左右滑动来设置搜索栏 好吧 你猜对了 它会滑动导航抽屉 我想做的是在聚焦时滑动搜索栏 在未聚焦时滑动导航抽屉 我该怎么做呢 这是我设置项目时的代码 我还没有设置搜索栏 private View onC
  • 如何在 AMD/ATI GPU 上运行 TensorFlow?

    读完本教程后https www tensorflow org guide using gpu https www tensorflow org guide using gpu我用这个简单的代码检查了 GPU 会话 import numpy
  • 无法连接到远程 SQL 服务器

    我的一个客户给了我一个完全合格的服务器名称 servername somedomain net尝试通过 VPN 连接到其 SQL Server 实例 所以我尝试使用他们给我的用户名和密码 没有运气 我可以 ping 通但无法连接 收到用户名
  • 如何将 float* 数组绑定到 cuda 中的一维纹理?

    我试图了解如何通过将纹理内存绑定到线性设备数组 而不是 cudaArray 来使用它 我的代码很简单 如下 我有一个包含 8 个数字的 float 数组 我试图将其绑定到 1D 纹理 然后在我的内核函数中尝试读取纹理并将值放入输出数组中 但
  • Typescript 和 Google 关闭

    我使用 Typescript 命令 tsc 创建一个包含所有平台类的 Javascript 文件 tsc Main ts out script myProject debug js declarations 然后 我想用 Google Cl