作为一个前端小白,周末开始试着写下坑爹的微信小程序,想用 ES7 来写,避免 callback hell 。
开始尝试用 babel 编译,然后发现没有 runtime ,需要 babel-polyfill 。于是用 babel-runtime-transform-runtime 来添加 async 和 generator 的转换。结果发现这货转换后在源码里就添加了俩 require 。由于微信小程序的 require 不支持 npm ,我又尝试用 webpack 来把他们打包在一起。最后又遇到了坑爹的 polyfill 里用到了大量微信小程序里没有的东西,比如 global 什么的。
看了些 github 上的轮子,大体是把缺的东西自己造一套,或者改下 babel 源码。感觉还是不太优雅,不知道各位前端菊苣有啥黑科技能解决这个问题。
因为不是太熟前端,各种搜也只想到了这些方案,都不是太如意。
还请赐教
(微信的朋友就不能让你们家 require 支持下搜索路径吗,只能用相对路径来写太不“工程化”了
![]() | 1 bdbai 2016-10-20 20:38:42 +08:00 via Android 楼主可以试下 Promise ,不一定要用 async/await 。参考: https://cnodejs.org/topic/57eb4e4bea2fa420446d4371#57ebf400ea2fa420446d43b5 |
![]() | 2 xxxyyy 2016-10-20 20:47:02 +08:00 via Android 避免 callback hell ,用 promise 已经可以了。 |
![]() | 3 zhuangzhuang1988 2016-10-20 20:58:08 +08:00 ts 上 babel 太乱。。 |
![]() | 4 xieguanglei 2016-10-20 20:59:48 +08:00 promise 太丑, async/await 大法好 |
![]() | 5 zhouquanbest OP @bdbai 微信小程序里也是没 promise 的 需要 babel 添加 pomise 肯定用 只是 es7 的 async 比起 es6 还要用 co 好太多 |
![]() | 6 bdbai 2016-10-20 21:25:58 +08:00 via Android @zhouquanbest 参考的帖子评论里有写引入 Bluebird 的方式。 我记得有人写过把 async/await 转换成 Promise 调用的 Babel 插件,不知道为什么官方没提。 |
![]() | 7 yidinghe 2016-10-20 21:30:22 +08:00 via Android 怪不得人们说最喜欢折腾的就是前端。 |
![]() | 9 zhouquanbest OP 微信小程序官方文档里说要自行引入 polyfill 我当时就懵逼了 这要怎么引入咧 |
![]() | 10 bdbai 2016-10-20 22:01:11 +08:00 via Android @zhouquanbest 语法层面的转换不需要 babel-polyfill ,单独引入 Bluebird 作 Promise 库就行。方法见链接评论。 |
11 poke707 2016-10-20 23:03:35 +08:00 ES7 和 ES2017 ,大家好像搞混了 ES7 是 ES2016 ,没有 async function http://www.2ality.com/2016/01/ecmascript-2016.html |
![]() | 12 zhouquanbest OP @poke707 es7/es2016 有 async 啊 我就是用 babel es2016 编译的 node 可用 https://huangxuan.me/2015/09/22/js-version/ |
![]() | 13 zhouquanbest OP |
![]() | 14 crs0910 2016-10-21 01:04:50 +08:00 via iPhone 大声说出前端回调超过两层的场景 |
![]() | 15 murmur 2016-10-21 07:54:47 +08:00 ![]() 微信小程序本身就小程序 你还要构建那么深的逻辑 该电一下了 没有用户 跑在沙河里 不能做全家桶 一个纯展示 点点填填表的东西 至于那么复杂么 |
![]() | 16 acthtml 2016-10-21 09:10:45 +08:00 现在做下来,微信小程序最大的障碍就是大小只有 1M 。 |
17 surgit 2016-10-21 09:23:35 +08:00 @xieguanglei 然后现在 async 还是返回 promise. |
18 cycgit 2016-10-21 09:34:46 +08:00 前端小应用完全不用担心 callback 。 不会那么深的 |
![]() | 19 xieguanglei 2016-10-21 09:38:00 +08:00 @surgit 工具爱怎么处理怎么处理,只要源码里别用 promise 就可以 ^^ |
![]() | 20 Pastsong 2016-10-21 10:12:48 +08:00 via Android 关于前端为了用一个新语言特性在开发环境引入几十个依赖并且造了一个轮子的故事 |
![]() | 21 zhouquanbest OP |
![]() | 22 gcaufy 2017-01-09 18:16:39 +08:00 https://github.com/wepyjs/wepy 完全解决 ES7 以及外部 NPM 包的问题。 |
23 iijx 2018-03-13 10:20:51 +08:00 所以一年过去了,楼主怎么用的,我也想用用 async |
![]() | 24 zhouquanbest OP |
![]() | 25 lijsh 2018-03-27 23:59:46 +08:00 @zhouquanbest #24 能开源出来参考一下吗?最近打算自己实现同样的需求,发觉有些小麻烦。 |