详细实现方式以及源码下载请前往 https://www.passerma.com/article/70
"koa2+typescript环境搭建
1.安装koa2脚手架
全局安装koa2脚手架 npm install -g koa-generator
2.使用脚手架创建项目
koa2 project
后面的project表示项目的名称,我这里以koa2-ts项目名为命令 koa2 koa2-ts 举例,创建完成,生成以下目录
进入项目,安装依赖
cd project
npm install
3.创建typescript环境
整理文件夹项目,开始构建typescript环境
1).重新整理文件
新建src文件夹,将routes,bin目录移动至src目录下,作为ts编译的入口
将app.js也移入到src目录
将bin下的www文件重命名为www.js
2).创建并配置tsconfig.json文件
使用 tsc -init ,会在当前目录创建tsconfig.json文件,修改配置文件
将compilerOptions里的allowJs解开注释设置为true
将compilerOptions里的outDir解开注释设置为./build
将compilerOptions里的rootDir解开注释设置为./src
将compilerOptions里的esModuleInterop解开注释设置为true
在compilerOptions同级增加exclude属性,设置值如下数组
[
"node_modules",
"views",
"public",
"build"
]
去掉无用项,得到最终配置项
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"allowJs": true,
"outDir": "./build",
"rootDir": "./src",
"strict": true,
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true
},
"exclude": [
"node_modules",
"views",
"public",
"build"
]
}
安装typescript
npm i typescript -D
3).修改package.json文件
先安装项目启动所需依赖两个的文件:nodemon,concurrently
npm i nodemon concurrently -D
增加对应的scripts脚本命令,设置完成后如下
"scripts": {
"dev:tsc": "tsc -w",
"dev:nodemon": "nodemon build/www",
"dev": "tsc && concurrently npm:dev:*",
"start": "tsc && node build/www"
}
4).修改app.js文件内容
引入path模块,修改静态文件以及模板文件目录
let staticPath = path.join(__dirname, '../public'); // 静态地址
let viewsPath = path.join(__dirname, '../views'); // 模板地址
app.use(require('koa-static')(staticPath))
app.use(views(viewsPath, {
extension: 'pug'
}))
5).启动项目,默认端口是3000
npm run dev 启动开发环境,每次修改完成都会实时重启项目
npm start 启动生产环境,只会启动一次项目
浏览器访问http://localhost:3000/,成功启动项目
4.typescript环境下编写接口
在routes下创建tsRoutes.ts文件
引入koa-router,现在可以使用import语法引入了,同时需要安装koa-router的类型定义文件 npm install @types/koa-router -D
import Router from 'koa-router'
const router = new Router();
router.prefix('/tsRoutes')
router.get('/', async (ctx) => {
ctx.body = {
data: [1, 2, 3]
};
})
export default router
在app.js引入该路由文件即可
浏览器访问http://localhost:3000/tsRoutes,成功解析ts文件
5.总结
代码已上传GitHub,链接koa2+typescript环境搭建
详细实现方式以及源码下载请前往 https://www.passerma.com/article/70