ThinkJS 是第一个全面支持使用 ES2015+ 特性开发的 Node.js 框架,使用 ES2015 里的 */yield 或者 ES2016 草案里的 async/await 可以很好的解决异步嵌套的问题,借助 Babel 编译,可以稳定运行在 Node.js 各个主流版本中。同时 ThinkJS 提供了自动编译和自动更新的机制,免去了文件修改后重启 Node.js 服务的麻烦。
使用 ES2015+ 特性来开发 Node.js 项目可以带来巨大的便利,但同时由于有些特性现在还不支持,需要借助 Babel 编译,运行的代码实际上是编译后的代码,这样给调试带来很大的麻烦。
ThinkJS 从 2.2.0 版本开始支持断点调试源代码,同时如果运行时出现报错,错误也是定位到源代码下。
目前断点调试可以支持 node-inspector、WebStorm、VS Code 等编辑器或者调试工具,具体使用文档请见 https://thinkjs.org/doc/debug.html。
默认情况下,但代码运行报错后,错误信息是定位到编译后的文件。由于编译后的文件行号和列号和源代码有很大的不同,这样给问题定位带来了很大的麻烦(虽然 Babel 编译的时候支持 retainLines 参数,但这样编译后的代码可读性非常差)。
2.2.0 版本开始借助 SourceMap,可以精准的把错误信息定位到源代码下。如:
'use strict';
import Base from './base.js';
export default class extends Base {
/**
* index action
* @return {Promise} []
*/
indexAction(){
this.xxx();
//auto render template file index_index.html
return this.display();
}
}
我们在 indexAction
里调用了一个不存在的方法 xxx
,那么此时的错误信息为:
[2016-03-30 11:56:43] [Error] TypeError: this.xxx is not a function
at _class.indexAction (/Users/welefen/Develop/git/thinkjs/src/home/controller/index.js:11:10)
at _class._callee$ (/Users/welefen/Develop/git/thinkjs/src/core/base.js:41:33)
at tryCatch (/Users/welefen/Develop/git/thinkjs/node_modules/babel-runtime/regenerator/runtime.js:88:40)
at GeneratorFunctionPrototype.invoke [as _invoke] (/Users/welefen/Develop/git/thinkjs/node_modules/babel-runtime/regenerator/runtime.js:341:22)
at GeneratorFunctionPrototype.prototype.(anonymous function) [as next] (/Users/welefen/Develop/git/thinkjs/node_modules/babel-runtime/regenerator/runtime.js:121:21)
at step (/Users/welefen/Develop/git/thinkjs/node_modules/babel-runtime/helpers/asyncToGenerator.js:17:30)
at /Users/welefen/Develop/git/thinkjs/node_modules/babel-runtime/helpers/asyncToGenerator.js:35:7
at Promise._execute (/Users/welefen/Develop/git/thinkjs/node_modules/bluebird/js/release/debuggability.js:180:9)
at Promise._resolveFromExecutor (/Users/welefen/Develop/git/thinkjs/node_modules/bluebird/js/release/promise.js:460:18)
at new Promise (/Users/welefen/Develop/git/thinkjs/node_modules/bluebird/js/release/promise.js:76:14)
at _class.<anonymous> (/Users/welefen/Develop/git/thinkjs/node_modules/babel-runtime/helpers/asyncToGenerator.js:14:12)
at _class.invoke (/Users/welefen/Develop/git/thinkjs/src/core/base.js:45:12)
at _class.action (/Users/welefen/Develop/git/thinkjs/src/core/http_base.js:80:25)
at _class.execAction (/Users/welefen/Develop/git/thinkjs/src/core/app.js:127:19)
at _class.execController (/Users/welefen/Develop/git/thinkjs/src/core/app.js:109:19)
at /Users/welefen/Develop/git/thinkjs/src/core/app.js:66:19
我们看到错误信息已经定位到 src/
目录,并且行号和列号和源代码是对应的。这样就很方便排查问题。
扫码关注w3ctech微信公众号
赞~
共收到1条回复