Skip to content

MIP2 核心代码开发注意事项

zoumiaojiang edited this page Jul 9, 2018 · 3 revisions

开发 MIP2 的过程中,允许使用 ES5, ES2015, ES2016+ 等语法,但是由于 MIP2 需要控制编译后的代码体积,没有引入 transform-runtime,所以也就没有引入 core-js 的 Polyfill,MIP2 引入了一些常用的 Polyfill 以满足开发需求。

目前提供了以下 Pollyfill:

  • Promise
  • Object.assign
  • fetch
  • fetchJSON

MIP2 可以用所有的 ES5 的语法:http://kangax.github.io/compat-table/es5/

关于 ES2015+,可以查看 http://kangax.github.io/compat-table/es6/

  • 首先:babel6 + core-js 如果都不支持的特性,在 MIP2 开发中不允许出现
  • 由于 MIP2 构建没有引入 core-js,所以就算在表格中列出的 babel6 + core-js 能支持的特性,在 MIP2 中也不一定能用。

可以通过表格列出的信息确认,哪些特性不能在 MIP2 中被使用:

50b832df278fb5d82e6c93a566978ff4
  1. 找到 babel6 + core-js
  2. 点开左边的具体特性查看详细情况,找到 babel6 + core-js 这列中对应的项是否标有 [8][18],标有 [8] 的代表依赖 core-js,[18] 表示需要用到 `regenerator-runtime,所以不能在 MIP2 中使用。
  3. 如果 es6 编译后只是依赖 Promise / Object.assign / fetch / fetchJSON 等 Polyfill,则可以在 MIP2 开发中使用。我们可以用 babel repl 对疑惑的特性进行编译,编译后,查看编译结果进一步判断,如果编译后用到了依赖 core-js 的特性,则在 MIP2 开发中不能使用你所疑惑的那个特性。

采用非高级的用法可以非常有效的帮助我们控制编译代码体积以及提升代码性能,在使用 ES2015+ 高级特性开发 MIP2 之前,可以先通过本篇 wiki 的方式查询一下是否支持该特性(其实不是 MIP2 编译的时候不支持,而是由于缺少 Pollyfill,会导致在低端浏览器运行报错)

Clone this wiki locally