代码编译
工具提供以下的代码编译能力
ES6 转 ES5
在 0.10.101000 以及之后版本的开发工具中,会默认使用 babel
将开发者 ES6
语法代码转换为三端都能很好支持的 ES5
的代码,帮助开发者解决环境不同所带来的开发问题。
需要注意的是:
- 为了提高代码质量,在开启
ES6
转换功能的情况下,默认启用javasctipt
严格模式,请参考 “use strict”
增强编译
在 1.02.1904282 以及之后版本的开发工具中,增加了增强编译
的选项来增强ES6转ES5
的能力,启用后会使用新的编译逻辑以及提供额外的选项供开发者使用。
启用增强编译
后的编译能力的对比:
特性 | 原有逻辑 | 增强编译 |
---|---|---|
Babel版本 | babel6 | babel7 |
Presets | es2015、stage0 | env {chrome:53, ios:8} |
Helpers | 单文件内联 | 跨文件共享 |
Async/Await | 不支持 | 支持 |
严格模式开关 | 不支持 | 支持 |
忽略文件目录 | 不支持 | 支持 |
代码压缩 | uglify-js | terser |
Babel插件 | - | 一系列proposal
|
polyfill | 大部分es6 | 新增三个polyfill
|
- 使用
preset-env
,支持最新的ECMAScript
语法 - 共享Babel辅助函数,默认放在项目
@babel/runtime
目录,可通过项目配置文件配置 - 支持async/await语法,按需注入
regeneratorRuntime
,目录位置与辅助函数一致 - 文件首行是
// use strict disable;
时,即可禁用当前文件严格模式 - 可通过
项目配置文件
指定任意文件、目录不经过编译(如:miniprogram_npm) - 原有逻辑支持
stage0
语法,为了向前兼容,引入了一系列 proposal 插件 - 关于polyfill,基础库中已经引入了大量的
es6
相关的 polyfill 可参考文档,增强编译下,新增:Array.prototype.includes(es7)
、Object.entries(es8)
、Object.values(es8)
样式补全
开启此选项,开发工具会自动检测并补全缺失样式,保证在低版本系统上的正常显示。尽管可以规避大部分的问题 ,还是建议开发者需要在 iOS 和 Android 上分别检查小程序的真实表现。
压缩代码
开启此选项,开发者工具在上传代码时候将会帮助开发者压缩和混淆 javascript
代码,减小代码包体积。
代码保护
开启此选项,开发者工具会尝试对项目代码进行保护,主要是对文件进行扁平化处理并替换 require
引用的文件名,以下情况不适合使用此功能
- 对于小程序只有简单页面的情况下,开启此功能效果不佳
- 有文件超过 500kb,且其中有使用
require
引用项目中的文件的情况,在运行时可能会报文件没有找到 - 动态引用的情况,如
var a = 'somefile.js'; require(a);
- 将
require
函数赋值给其他变量的情况,如var a = require; a('somefile.js');
- 将
require
作为二元运算符的参数的情况,如require + 1;
- 使用
...
运算符且未开启 ES6 转 ES5 的情况
启用多核心编译
在四核及以上的电脑上此选项可见。启用此选项,会充分利用 CPU 资源来编译项目的 JS 代码,提高编译的效率。可以选择关闭此选项。