让koa跑在ts上。。。
最近ts相关话题经常出现在论坛里,我想很多人还不知道怎么用ts跑node,折腾了一阵,拿出来分享一下。
直入主题。
编辑器
随便选个顺手的好了
需求
- Node.js
- tsc
- typings
安装typescript
npm install -g typescript
创建并初始化工程
老套路。。。
npm init
安装typings
npm install koa typings
tsconfig.json
tsconfig.json
文件是用来告诉Typescript编译器如何编译你的代码,同时告诉你的编辑器如何提供智能提示和错误提醒。
这里我们就用个现成的,因为是koa所以target要用ES6,不然yield什么都会报错。
{
"compilerOptions": {
"target": "ES6",
"module": "commonjs",
"noEmitOnError": true,
"noImplicitAny": true,
"experimentalDecorators": true,
"sourceMap": true,
"sourceRoot": "src",
"outDir": "bld"
},
"exclude": [
"bld",
"node_modules"
]
}
建立应用
创建一个文件:
src/index.ts
例子直接用官网的:
import * as koa from 'koa';
let app = new koa;
app.use(function *(next) {
let start = new Date;
yield next;
let ms = Number(new Date) - Number(start);
console.log('%s %s - %s', this.method, this.url, ms)
});
app.use(function () {
this.body = 'Hello World';
});
app.listen(3000);
编译&运行
代码都准备好了接下来就是编译运行,
tsc -w
但在之前要注意一点,我们要导入的koa是js写的,所以需要ts的声明文件。
typings上面已经有koa的声明文件了。
typings install koa --ambient --save
之后可以考虑把typings生成的文件夹里面的ts文件忽略掉。 编译,运行:
node bld/index.js
总结
感觉现在用ts跑node最大问题还是第三方包的引入问题,之前的tsd已经废弃,typings虽然把大部分常用库的声明都实现了,但还是有一种慢人一拍的感觉。而且node本身也实现了es6的大部分功能,感觉提升也不是很大。还是用ts写类似angular这种es6支持较差的浏览器端程序比较爽。