V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
zhouquanbest
V2EX  ›  JavaScript

求问如何优雅的在微信小程序里使用 ES7?

  •  
  •   zhouquanbest · 2016-10-20 20:26:47 +08:00 · 14536 次点击
    这是一个创建于 2716 天前的主题,其中的信息可能已经有所发展或是发生改变。

    作为一个前端小白,周末开始试着写下坑爹的微信小程序,想用 ES7 来写,避免 callback hell 。

    开始尝试用 babel 编译,然后发现没有 runtime ,需要 babel-polyfill 。于是用 babel-runtime-transform-runtime 来添加 async 和 generator 的转换。结果发现这货转换后在源码里就添加了俩 require 。由于微信小程序的 require 不支持 npm ,我又尝试用 webpack 来把他们打包在一起。最后又遇到了坑爹的 polyfill 里用到了大量微信小程序里没有的东西,比如 global 什么的。

    看了些 github 上的轮子,大体是把缺的东西自己造一套,或者改下 babel 源码。感觉还是不太优雅,不知道各位前端菊苣有啥黑科技能解决这个问题。
    因为不是太熟前端,各种搜也只想到了这些方案,都不是太如意。
    还请赐教

    (微信的朋友就不能让你们家 require 支持下搜索路径吗,只能用相对路径来写太不“工程化”了

    25 条回复    2018-03-27 23:59:46 +08:00
    bdbai
        1
    bdbai  
       2016-10-20 20:38:42 +08:00 via Android
    楼主可以试下 Promise ,不一定要用 async/await 。参考:
    https://cnodejs.org/topic/57eb4e4bea2fa420446d4371#57ebf400ea2fa420446d43b5
    xxxyyy
        2
    xxxyyy  
       2016-10-20 20:47:02 +08:00 via Android
    避免 callback hell ,用 promise 已经可以了。
    zhuangzhuang1988
        3
    zhuangzhuang1988  
       2016-10-20 20:58:08 +08:00
    ts 上 babel 太乱。。
    xieguanglei
        4
    xieguanglei  
       2016-10-20 20:59:48 +08:00
    promise 太丑, async/await 大法好
    zhouquanbest
        5
    zhouquanbest  
    OP
       2016-10-20 21:18:39 +08:00 via Android
    @bdbai 微信小程序里也是没 promise 的 需要 babel 添加
    promise 肯定用 只是 es7 的 async 比起 es6 还要用 co 好太多
    bdbai
        6
    bdbai  
       2016-10-20 21:25:58 +08:00 via Android
    @zhouquanbest 参考的帖子评论里有写引入 Bluebird 的方式。
    我记得有人写过把 async/await 转换成 Promise 调用的 Babel 插件,不知道为什么官方没提。
    yidinghe
        7
    yidinghe  
       2016-10-20 21:30:22 +08:00 via Android
    怪不得人们说最喜欢折腾的就是前端。
    4641585
        8
    4641585  
       2016-10-20 21:53:35 +08:00
    @yidinghe 这次是刚需就别强行黑了吧。
    zhouquanbest
        9
    zhouquanbest  
    OP
       2016-10-20 21:56:02 +08:00 via Android
    微信小程序官方文档里说要自行引入 polyfill
    我当时就懵逼了 这要怎么引入咧
    bdbai
        10
    bdbai  
       2016-10-20 22:01:11 +08:00 via Android
    @zhouquanbest 语法层面的转换不需要 babel-polyfill ,单独引入 Bluebird 作 Promise 库就行。方法见链接评论。
    poke707
        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
    zhouquanbest
        12
    zhouquanbest  
    OP
       2016-10-21 00:04:42 +08:00 via Android
    @poke707 es7/es2016 有 async 啊
    我就是用 babel es2016 编译的 node 可用
    https://huangxuan.me/2015/09/22/js-version/
    zhouquanbest
        13
    zhouquanbest  
    OP
       2016-10-21 00:35:14 +08:00
    @poke707
    刚看了下 原来 async 最后没来的及进 es7 最终版
    不过各种轮子已经默认把 async 塞进了 es7 里 用还是能用
    crs0910
        14
    crs0910  
       2016-10-21 01:04:50 +08:00 via iPhone
    大声说出前端回调超过两层的场景
    murmur
        15
    murmur  
       2016-10-21 07:54:47 +08:00   ❤️ 1
    微信小程序本身就小程序 你还要构建那么深的逻辑 该电一下了
    没有用户 跑在沙河里 不能做全家桶 一个纯展示 点点填填表的东西 至于那么复杂么
    acthtml
        16
    acthtml  
       2016-10-21 09:10:45 +08:00
    现在做下来,微信小程序最大的障碍就是大小只有 1M 。
    surgit
        17
    surgit  
       2016-10-21 09:23:35 +08:00
    @xieguanglei 然后现在 async 还是返回 promise.
    cycgit
        18
    cycgit  
       2016-10-21 09:34:46 +08:00
    前端小应用完全不用担心 callback 。 不会那么深的
    xieguanglei
        19
    xieguanglei  
       2016-10-21 09:38:00 +08:00
    @surgit 工具爱怎么处理怎么处理,只要源码里别用 promise 就可以 ^^
    Pastsong
        20
    Pastsong  
       2016-10-21 10:12:48 +08:00 via Android
    关于前端为了用一个新语言特性在开发环境引入几十个依赖并且造了一个轮子的故事
    zhouquanbest
        21
    zhouquanbest  
    OP
       2016-10-21 10:24:12 +08:00
    @cycgit @crs0910
    还是很容易深吧
    比如先登录再定位然后发起个网络请求最后等用户一个操作
    一套下来就爆炸了

    总觉得要不我还是用 rx 吧 移动端一直用 rxjava 和 rxswift 也是蛮顺的
    gcaufy
        22
    gcaufy  
       2017-01-09 18:16:39 +08:00
    https://github.com/wepyjs/wepy
    完全解决 ES7 以及外部 NPM 包的问题。
    iijx
        23
    iijx  
       2018-03-13 10:20:51 +08:00
    所以一年过去了,楼主怎么用的,我也想用用 async
    zhouquanbest
        24
    zhouquanbest  
    OP
       2018-03-13 18:37:11 +08:00
    @iijx
    我写了一套脚手架 让微信小程序支持 npm 了。。。。
    通过预编译把原来的语法变成微信小程序的
    lijsh
        25
    lijsh  
       2018-03-27 23:59:46 +08:00
    @zhouquanbest #24 能开源出来参考一下吗?最近打算自己实现同样的需求,发觉有些小麻烦。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3016 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 14:59 · PVG 22:59 · LAX 07:59 · JFK 10:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.