miniapp icon indicating copy to clipboard operation
miniapp copied to clipboard

[Enhance]优化Babel重复注入helper函数问题

Open Awen-hub opened this issue 3 years ago • 1 comments

关联issue

解决方案

build.json中增加字段envOptions, 用于修改此处@babel/preset-env插件的参数 简单实现:

build.json
{
  "envOptions": {
    "targets": {
      "chrome": "90"
    }
  }
}
output.js
[[require('@babel/preset-env'), {
      exclude: ['@babel/plugin-transform-regenerator'],
      ...envOptions
}]]

原因说明

关键目的在于抽离Babel的helper函数。而这个功能目前微信开发者工具已经具备,可参考微信Bebel转译说明 , 经过实验发现,无论传给微信开发者工具的代码是否经过es6转译es5,开发者工具都会自动注入完整的helper函数。因此在rax端解决helper函数多次注入问题并不是最优解,原因是这样至少都会有一次的重复注入。合理的做法应该是让开发者通过配置,选择性关闭部分es6转译es5功能,使rax端生成的代码不含helper函数,把转译任务交给开发者工具。

为什么强调选择性关闭? 微信小程序并没有完全兼容es6+语法,因此对部分较新的语法进行转译是有必要的。需要转译到什么程度,开发者可以通过配置envOptions.targets字段值去解决。

目前遇到的问题

新增build.json字段需要修改build-plugin-component这个插件, 不了解修改这个插件代码需要在哪里提pr。

Awen-hub avatar Apr 24 '22 08:04 Awen-hub

@ChrisCindy 麻烦看一下这样处理是否会对其他工程造成影响,有明确的方案后我这边会提交一个pr

Awen-hub avatar Apr 24 '22 08:04 Awen-hub