Babel的Typescript插件已支持const enum,显著减少包体大小!(官方快升级吧)

地址如下:
https://www.babeljs.cn/docs/babel-preset-typescript


希望官方能尽快升级,不然产生的废代码太多,影响包体大小,2.X如果可以的话,希望也能升级一下(不抱多大希望,哈哈哈)
@jare

1赞

导出的常量枚举生成对象,还是不优,但是比之前生成的代码要少

用Babel试了一下
源文件如下:

export const enum TestExport {
    Field1 = 1,
    Field2 = 2,
    Field3 = 3,
    Field4 = 4,
    Field5 = 5,
    Field6 = 6,
    Field7 = 7,
}

const enum TestNoExport {
    Field1 = 1,
    Field2 = 2,
    Field3 = 3,
    Field4 = 4,
    Field5 = 5,
    Field6 = 6,
    Field7 = 7,
}

console.log(TestNoExport.Field1);

"optimizeConstEnums": false 生成代码如下:

exports.TestExport = void 0;
let TestExport;
exports.TestExport = TestExport;
(function (TestExport) {
  TestExport[TestExport["Field1"] = 1] = "Field1";
  TestExport[TestExport["Field2"] = 2] = "Field2";
  TestExport[TestExport["Field3"] = 3] = "Field3";
  TestExport[TestExport["Field4"] = 4] = "Field4";
  TestExport[TestExport["Field5"] = 5] = "Field5";
  TestExport[TestExport["Field6"] = 6] = "Field6";
  TestExport[TestExport["Field7"] = 7] = "Field7";
})(TestExport || (exports.TestExport = TestExport = {}));
var TestNoExport;
(function (TestNoExport) {
  TestNoExport[TestNoExport["Field1"] = 1] = "Field1";
  TestNoExport[TestNoExport["Field2"] = 2] = "Field2";
  TestNoExport[TestNoExport["Field3"] = 3] = "Field3";
  TestNoExport[TestNoExport["Field4"] = 4] = "Field4";
  TestNoExport[TestNoExport["Field5"] = 5] = "Field5";
  TestNoExport[TestNoExport["Field6"] = 6] = "Field6";
  TestNoExport[TestNoExport["Field7"] = 7] = "Field7";
})(TestNoExport || (TestNoExport = {}));
console.log(TestNoExport.Field1);

"optimizeConstEnums": true 生成代码如下:

exports.TestExport = void 0;
var TestExport = {
  Field1: 1,
  Field2: 2,
  Field3: 3,
  Field4: 4,
  Field5: 5,
  Field6: 6,
  Field7: 7
};
exports.TestExport = TestExport;
console.log(1);

插件版本早点升上去吧,项目里面如果大量用到枚举常量的话,可以减少包体大小。

@jare @wangzhe 官方来看看,对于做中重度的游戏有很大优化。枚举常量太常用了。

企业微信截图_16739385194502
不必死守Babel,或者提供一个选项让用户自主切换代码编译器,这个Babel,哎。。。

我们项目里协议枚举生成的代码量估计占到了代码量的5%,太大了,另外TsLib没有做优化,每个文件都有一份,我自己在编译后修改合并,可以减少10%代码。

嗯。网络协议的消息id枚举,表格id自定的key之类的枚举,游戏内各种事件枚举,等等 生成的废代码量巨大。我这个帖子,官方直接忽略了,算了,不骂了

如果是pb可以用json格式,小游戏就不行了

帮你提交了 issue

2赞

非常感谢!

问下,这个升级3.8上有可能上吗?

这个现在支持了吗?我看那个issue都关闭了,但我测了3.8.3,还是不行

@minggo @dumganhar 这个可以搞吗

已经支持了。不过我们再确认下效果。

我仔细测试了下,只支持文件内部非export的静态枚举。
一旦添加export就不行了,没法跨文件。
这样很鸡肋啊。

3.8.3 只打2DUI相关的,再加上spine的web包空就有1.8MB,人都傻了,2.4.x的才900K