一直对typescript和node.js处于了解阶段,未实际去运用过
刚好老大们又讲到了kos框架
出于好奇且闲的蛋疼,就去某度看各路大佬的教程,自己也跟着搭建一遍
虽然最后跑成功了,但是坑有多少自己知道哇 o(╥﹏╥)
1、查看自己的node版本
官方文档说明:“Koa 依赖 node v7.6.0 或 ES2015及更高版本和 async 方法支持”
用node -v 查看自己的node版本,如果较低就自行升级吧~
我的node.js版本是5.8.0 就踩雷了
2、安装tsc依赖和构建项目
全局安装typescript:
npm install -g typescript
构建node.js项目:
npm init
3、进入项目目录
生成tsc配置文件(tsconfig.json):
tsc --init
安装依赖:
npm i
安装kos依赖:
npm i koa koa-router
npm i --save-dev typescript ts-node nodemon
npm i --save-dev @types/koa @types/koa-router
安装typescript依赖:
npm i typescript
在项目中,有时候需要用到import来引入自己建立的模块或是引入第三方模块,然而由于typescript的机制,直接import是不行的,这个时候就需要安装@types/node依赖
npm install --save-dev @types/node
4、修改package.json
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "tsc && node app.js"
}
注意:node后面接的是主要文件,即要运行的文件名
5、项目目录下创建app.ts(将要运行的ts文件),根据官方文档代码如下:
const Koa = require('koa');
const app = new Koa();
app.use(async ctx => {
ctx.body = 'Hello World';
});
app.listen(3000);
6、奔跑吧!项目!
编译项目:
tsc
跑项目:
npm start
在浏览器中输入url:localhost:3000
1、编译时报错
ode_modules/@types/node/index.d.ts(6208,55): error TS2304: Cannot find name 'Map'.
node_modules/@types/node/index.d.ts(6215,55): error TS2304: Cannot find name 'Set'.
node_modules/@types/node/index.d.ts(6219,64): error TS2304: Cannot find name 'Symbol'.
node_modules/@types/node/index.d.ts(6225,59): error TS2304: Cannot find name 'WeakMap'.
node_modules/@types/node/index.d.ts(6226,59): error TS2304: Cannot find name 'WeakSet'.
这个时候就要查看tsc配置文件(tsconfig.json)
将target改成“es6”,利用tsc --init生成的tsc配置文件中,用的是es5,就会报这种错,因为‘Map’和‘Set’都是es6的特性
2、编译时报错
app.ts(1,1): error TS7038: A namespace-style import cannot be called or constructed, and will cause a failure at runtime.
app.ts(2,1): error TS7038: A namespace-style import cannot be called or constructed, and will cause a failure at runtime.
app.ts(3,14): error TS2351: Cannot use 'new' with an expression whose type lacks a call or construct signature.
app.ts(4,17): error TS2351: Cannot use 'new' with an expression whose type lacks a call or construct signature.
app.ts(5,26): error TS7006: Parameter 'ctx' implicitly has an 'any' type.
在app.js中,ctx尚未定义变量类型,将ctx改成(ctx: any)即可
代码如下:
const Koa = require('koa');
const app = new Koa();
app.use(async (ctx: any) => {
ctx.body = 'Hello World';
});
app.listen(3000);
------------------------
刚开始思维挺混乱的,也看了很多文档,做出了很多尝试
老大说要自己去走一遍才知道有什么坑
今天总算明白了。。心累呐,大周末美好的几个小时贡献给IT界
新的尝试挺好的。(*^▽^*)