node.js开发:ts+koa --- 踩坑之路(一)

一直对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界

新的尝试挺好的。(*^▽^*)

猜你喜欢

转载自blog.csdn.net/qq_31808899/article/details/80463949