V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
welefen
V2EX  ›  Node.js

ThinkJS 3 正式版发布!

  •  4
     
  •   welefen · 2017-09-04 09:47:04 +08:00 · 8012 次点击
    这是一个创建于 2416 天前的主题,其中的信息可能已经有所发展或是发生改变。

    ThinkJS 是一款拥抱未来的 Node.js Web 框架,致力于集成项目最佳实践,规范项目让企业级团队开发变得更加简单,更加高效。我们的 Github 地址是: https://github.com/thinkjs/thinkjs 欢迎大家 star~

    ThinkJS 2.x 发布的时候,虽然我们带来了很多非常棒的功能,但我们也意识到本身的不足。针对这些问题,开发团队经过几个月的紧张开发,我们很高兴的宣布,ThinkJS 迎来了新的大版本 3.0。目前该版本已经在线上多个项目中使用,简单一个命令就可以让你下载使用它:

    npm install -g think-cli 
    

    有哪些更新?

    正如之前所说,为了解决之前遗留的不足问题我们开发了新版本,下图为我们新版的架构图。

    除了引进了新的架构,对框架进行高度解构外,我们还增加了很多新的功能,优化了老版为人诟病的用法,下面就让我们来具体看看有哪些更新吧。

    基于 Koa 重构框架架构

    相较于之前使用自身集成架构,3.0 最大的改变就是将底层架构基于 Koa 重构。重构之后的 ThinkJS 3.0 版本能完全兼容 Koa 的中间件。使用 Koa 重构主要有下面几个原因:

    • Koa 现在已经比较稳定,洋葱模型的中间件更能满足多维度的需求,同时中间件生态已经慢慢成熟。这些都是 ThinkJS 之前所不具备的,基于 Koa 后就可以站在巨人的肩膀上,可以做的更好。

    • Koa 2.0 中使用更优雅的 async/await 解决异步问题,这个理念和 ThinkJS 是完全一致的。借助 Babel 在 ThinkJS 2.x 版本中就可以使用这些 ES next 语法功能。随着 Node 8.x LTS 的即将发布,async/await 被原生支持后我们就可以不用借助 Babel 转译直接在生产环境中使用了。

    精简核心,支持扩展和适配器

    ThinkJS 2.x 版本内置了很多功能,这些功能基本上是很多项目的最佳实践,但并不一是每个项目都需要这些所有的功能,但基于 2.x 的架构要实现这个需求就非常困难。所以 ThinkJS 3.0 版本基于 Koa 重构后在这块做了精简,不再提供丰富的功能,而是提供一个最基本的核心,然后通过扩展满足更多的需求。

    多进程模型

    ThinkJS 2.x 单进程是可选配置,且框架设计较为简单,很多功能需要开发者手动处理。我们在 3.0 中开发了 think-cluter 模块直接内置了多进程模型,最大限度的利用多核 CPU 提高响应速度。 同时,提供一套进程之间通信的方式,如::通知其他进程执行某个任务,代码在线更新后重启所有的子进程。

    智能的错误提示

    Node.js 开发中一个比较头疼的问题就是错误处理问题,遇到问题后查错和定位问题后比较麻烦,尤其是使用了 Babel 转译之后,为此我们专门开发了 think-trace 模块用来跟踪错误问题,能够更加友好的捕捉显示错误堆栈信息。

    还有!

    除了刚才说的一些功能,我们还有一些其它的更新要告诉大家:

    感谢

    最后感谢所有使用 ThinkJS 框架的用户,感谢你们多年来的支持,是你们的存在让我们有了更进一步的勇气。当然还需要感谢所有为 ThinkJS 项目做过贡献的贡献者,包括代码贡献和文档贡献,你们的努力让 ThinkJS 变的越来越棒!如果没时间帮助贡献代码想用其它方式支持我们也可以通过捐赠的方式支持我们,你们的捐赠会用来帮助 ThinkJS 推广。感谢你们所有人,让我们一起拥抱 ThinkJS,期待更美好的未来吧!

    23 条回复    2017-10-12 17:32:44 +08:00
    AlphaTr
        1
    AlphaTr  
       2017-09-04 09:57:42 +08:00 via iPhone
    试用了下,比上个版本好用,那个错误展示比较直观
    qgy18
        2
    qgy18  
       2017-09-04 09:58:52 +08:00 via iPhone
    支持!看来得找个时间把 https://imququ.com 给升级一下了。
    wyan453351466
        3
    wyan453351466  
       2017-09-04 10:02:44 +08:00
    问下这个框架和 ThinkPHP 有什么关系。。
    lizheming
        4
    lizheming  
       2017-09-04 10:04:10 +08:00
    @wyan453351466 可以看一下作者这篇文章 http://welefen.com/post/experience-of-thinkjs.html 里面有说明和 ThinkPHP 的渊源
    bezos
        5
    bezos  
       2017-09-04 10:04:26 +08:00
    @wyan453351466 名字是有点像,不过整体架构和思路已经完全不一样了,具体可以看作者发布的这篇文章 开发和维护 ThinkJS 是一种什么样的体验?( http://link.zhihu.com/?target=http%3A//welefen.com/post/experience-of-thinkjs.html ) 里面有讲述它和 ThinkPHP 的关系~
    airyland
        6
    airyland  
       2017-09-04 10:07:25 +08:00
    支持下。之前等得比较久投奔了 egg。
    smallpath
        7
    smallpath  
       2017-09-04 10:58:45 +08:00
    支持! 一年前用 thinkjs 写过一个项目,感受很好
    welefen
        8
    welefen  
    OP
       2017-09-04 11:06:21 +08:00
    @airyland 现在可以再回来嘛
    zysidea
        9
    zysidea  
       2017-09-04 11:40:27 +08:00
    前端框架层出不穷,开发者表示很伤...不过还是赞一波
    smallpath
        10
    smallpath  
       2017-09-04 11:49:11 +08:00
    @zysidea 这是纯后端框架哦
    wwdyy
        11
    wwdyy  
       2017-09-04 11:56:37 +08:00
    支持,现在正在用 express 练手,之后再用 thinkjs 搭建自己的博客
    arden
        12
    arden  
       2017-09-04 12:01:26 +08:00
    用了 egg,感觉还是很多地方不是很方便。thinkjs 看了下文档,感觉非常不错,应该是 egg 最大的对手。
    hantsy
        13
    hantsy  
       2017-09-04 12:04:21 +08:00
    试用了 hapi, koa, expressjs。最终还是感觉 Express 靠谱,生态圈对于选择很重要。

    loopback 的开发版本终于上 Typescript 了,写 RESTful APIs 或者 Microservice 更方便了。
    kancloud
        14
    kancloud  
       2017-09-04 12:09:55 +08:00
    赞一个^_^
    hantsy
        15
    hantsy  
       2017-09-04 12:12:08 +08:00   ❤️ 1
    看到官网的那个示例,完全断了我想用它的想法,满满的 Apache Struts 的回忆。

    ```
    //user controller, home/controller/user.js
    export default class extends think.controller.base {
    //login action
    async loginAction(){
    if(this.isGet()){
    return this.display();
    }
    //data is validated in logic
    let data = this.post();
    let result = await this.model('user').where({name: data.name}).find();
    if(!validateLogin(result)){
    return this.fail('login fail');
    }
    //set userInfo to session
    await this.session('userInfo', result);
    return this.success();
    }
    }
    ```
    TangMonk
        16
    TangMonk  
       2017-09-04 12:12:41 +08:00
    @hantsy loopback 就是一个坑,https://github.com/strongloop/loopback-connector-mysql/issues/57,这个 issue 是 2014 年开的,现在还没有修复
    hantsy
        17
    hantsy  
       2017-09-04 21:44:05 +08:00
    @TangMonk 这个又不是 BUG,功能性的需求而已,你需要,在其它人眼里,也不是必不可少的功能。

    Loopback 还没正而把经的用,之前看 StrongLoop 文档,只是感觉功能上是比较全面的一个框架。

    再说了,MEAN/MERN stack , Expressjs/mongoose/Monogo 几乎是标配,js 和 Mongo 是天然结合。即使非 NodeJS,比如我大部分时间写 Java, 从几年前开始,也慢慢弱化 RDBMS 了, 项目中混合用 Mongo,Redis,ElasticSearch 很常见了。
    TangMonk
        18
    TangMonk  
       2017-09-04 21:57:07 +08:00
    @hantsy

    loopback 你用了你就知道了,还不如自己写 generator。
    mongo 也是个坑,全靠商业推广,不能做正经应用,不如 pg/mysql。
    welefen
        19
    welefen  
    OP
       2017-09-05 09:27:40 +08:00
    @TangMonk @hantsy 哈哈,怎么讨论起来 Loopback 起来了
    hantsy
        20
    hantsy  
       2017-09-05 09:34:29 +08:00
    @TangMonk 好吧,大约从 5 年前开始,已经用 Mongo 几个不正经应用。
    hantsy
        21
    hantsy  
       2017-09-05 10:13:49 +08:00
    @welefen 现在的一些框架基本都是流行从 callback 到 closure/lambda,expressjs 一个核心概念就是 middleware。

    前端框架现在也是借助类似概念,react/redux,angular 4.3 的 HTTP Client 设计等。
    后端 PHP 的规范 PSR 中也定义了 Middleware,Java 中的一些框架, vertx (支持多种语言), sparkjava, 都多少有 expressjs 的影子,Spring 5 也引入 fp 类似编程模型,如 RouterFunction, HandlerFunction, (可以使用 Labmda 简化)等,https://github.com/hantsy/spring-reactive-sample/blob/master/boot-routes/src/main/java/com/example/demo/DemoApplication.java。

    当然像 ThinkJS 这种直观的 controller,肯定会有人喜欢,就如十几年前我第一次看到 Struts 一样,当时也在试用 Spring MVC,一些人鼓吹 Spring MVC 有多好,我当时也没觉得。但 Struts 最糟糕的设计就是强制继承( Form,Action ),Spring MVC 相对设计自由一些,Spring MVC 真正的优势在于后面借助 Java 5 Annotation 后,整个项目代码就干净了很多。
    viko16
        22
    viko16  
       2017-09-05 10:15:12 +08:00   ❤️ 1
    依旧满满的 PHP 写法即视感
    ie88
        23
    ie88  
       2017-10-12 17:32:44 +08:00
    想知道 3.x 的文档在哪里?官网只有 2.0 的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3356 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 13:04 · PVG 21:04 · LAX 06:04 · JFK 09:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.