使⽤用 ES6/7 特性
开发 Node 项⺫⽬目
2015/11/21
李成银
关于我
• 李成银@奇舞团
• 7 年⼯工作经验
• ThinkJS 作者
• 擅⻓长⼯工程化解决⽅方案
• https://github.com/welefen
⼤大纲
• 异步回调问题
• ⾃自动更新问题
• ThinkJS 介绍
缩写
• ES6:ECMAScript 6,
ECMAScript 2015
• ES7:ECMAScript 7
• 编译:转译
• Node: Node.js node.js
Node 特点
• ⾼高并发
• 事件驱动
• IO 密集型
异步问题
异步处理⽅方式
• callback
• Promise
• ES6 generators
• ES7 async functions
Callback
callback
callback
Promise
Promise
Promise
Callback => Promise
Promise 的问题
• this 指向问题没有解决
• 局部变量需要借助外层的临
时变量才能跳跃向后传递
• ⽆无法直接跳过中间某些环节
• 隐藏错误
Generators
Generators
• 使⽤用 function * 和 yield
• 是迭代器的⼀一个⼦子类型
Generators
Generators 的问题
• 语义上不易理解
• 需要借助执⾏行器
• ⽆无法和 Arrows ⼀一起使⽤用
• yield 和 yield *
• function * 和 * method
Async functions
Async functions
Async functions
• 基于 Promise
• 返回 Promise
• 使⽤用 async/await 更加语义性
• ⽀支持和 Arrows ⼀一起使⽤用
• 不⽤用借助第三⽅方模块
Async functions 错误捕获
try/catch 捕获错误
Async functions 错误捕获
特定值判断是否有错误
Async functions 并⾏行处理
Async functions 问题
• Stage: Proposal
• ⺫⽬目前还没有⽀支持的 Runtime
使用 ES 6/7 特性开发 Node 项目
https://github.com/facebook/regenerator
编译带来的问题
• ⽂文件修改后如何⾃自动编译
• 如何精准定位报错信息
--watch
--retain-lines
• 如何断点调试
只能断点调试编译后的代码
使⽤用更多的特性
• class
• Arrows
• Enhanced Object Literals
• Template Strings
• Default + Rest + Spread
• …
⽆无需担⼼心当前的 Node 环境是否⽀支持
性能如何?
class
generators
⾃自动更新问题
fs.watch?
chokidar
nodemon
⽆无法保存临时数据
更好的解决⽅方案
• 监听⽂文件修改变化
• 热更新修改的⽂文件
• 以及依赖⽂文件
require.cache
cache 格式
重写 require ⽅方法
lib/module.js
清除缓存
2014/09/22 发布 1.0 版本
2015/10/30 发布 2.0 版本
https://thinkjs.org
Async functions
Generators
Promise
特性
• ⾃自动编译、⾃自动更新
• 3 种项⺫⽬目模式:mini、normal、
module
• 3 种项⺫⽬目环境:development、
testing、production
• 3 种运⾏行环境:ES5、ES6/7-
>ES5、ES6
更多特性
•⽀支持 Mysql,MongoDB,Redis 数据库
• ⽀支持 socket.io,SockJS 等 WebSocket库
• ⽀支持命令⾏行执⾏行和定时任务
• ⽀支持国际化和多主题
• ⽀支持 Middleware 和 Adapter
• ⽀支持 __before,__after,__call
• ⽀支持⾃自动创建 REST API
• …
稳定性和性能
• 1500+ 测试⽤用例,95%
• 完善的⽂文档,中⽂文/英⽂文,PDF
• 2000+ commits
• https://www.thinkjs.org
• https://github.com/75team/thinkjs
• QQ 交流群:339337680
¥5000/年
奖励社区贡献者
4 + 2
ThinkJS 微信红包群
谢谢⼤大家

More Related Content

PDF
關於 Javascript 非同步的那些事兒 公開版
PPTX
Angularjs
PPT
Ruby 的快与慢
PDF
前端编译平台
PDF
React js入門教學
PPTX
Angular 7 全新功能探索 (Angular Taiwan 2018)
PPTX
Micro-frontends with Angular 10 (Modern Web 2020)
PDF
百度前端性能监控与优化实践
關於 Javascript 非同步的那些事兒 公開版
Angularjs
Ruby 的快与慢
前端编译平台
React js入門教學
Angular 7 全新功能探索 (Angular Taiwan 2018)
Micro-frontends with Angular 10 (Modern Web 2020)
百度前端性能监控与优化实践

What's hot (20)

PPTX
Open source的devops工具箱 公開版@coscup2016
PPTX
DDD系統分析
PPTX
Ioc & in direction
PPTX
React js
PPTX
Angular 4 新手入門攻略完全制霸
PPTX
Asp.net core v1.0
PPTX
Angular 2 Taiwan 小聚 Forms 介紹
PDF
PyCon China 2012 孙毅
PDF
寫出高性能的服務與應用 那些你沒想過的事
PPTX
Blazor 與 Radzen 同行
PDF
Angular js twmvc#17
PDF
AngularJS training in Luster
PPTX
PDF
W3CTech美团react专场-React Native 初探
PDF
美团点评技术沙龙06 - 滴滴移动端测试解耦工具实践
PPTX
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
PDF
W3CTech美团react专场-Thinking in React
PPTX
Coffee script
PPTX
Frontend Devops at Cloudinsight
PPTX
ASP.NET 5 快速入門 (Getting Started ASP.NET 5)
Open source的devops工具箱 公開版@coscup2016
DDD系統分析
Ioc & in direction
React js
Angular 4 新手入門攻略完全制霸
Asp.net core v1.0
Angular 2 Taiwan 小聚 Forms 介紹
PyCon China 2012 孙毅
寫出高性能的服務與應用 那些你沒想過的事
Blazor 與 Radzen 同行
Angular js twmvc#17
AngularJS training in Luster
W3CTech美团react专场-React Native 初探
美团点评技术沙龙06 - 滴滴移动端测试解耦工具实践
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
W3CTech美团react专场-Thinking in React
Coffee script
Frontend Devops at Cloudinsight
ASP.NET 5 快速入門 (Getting Started ASP.NET 5)
Ad

使用 ES 6/7 特性开发 Node 项目