koa TS ESLint搭建服务器重构版过程详解

2022-10-25 11:11:09

目录初始化项目目录安装项目运行所需要的软件包修改package.json从.env中加载环境变量配置路径别名用法目录规范编码风格规范Eslint初始化项目目录yarninit-y安装项目运行所需要...

目录
初始化项目目录
安装项目运行所需要的软件包
修改package.json
从.env中加载环境变量
配置路径别名
用法
目录规范
编码风格规范
Eslint

初始化项目目录

yarn init -y
www.cppcns.com

安装项目运行所需要的软件包

生产依赖
yarn add koa koa-router cross-env module-alias dotenv

koa:搭建 Koa 服务的核心软件包。

koa-router:Koa 路由软件包。

koa-bodyparser:解析 POST 请求参数的软件包。

cross-env:为项目添加不同的运行环境。

module-alias:可以像在 vue 和 React 中一样使用路径别名。

dotenv:加载项目根目录下的.env中的配置。

koa-cors:跨域资源处理。

copyfiles:拷贝一些无法打包的资源。因为tsc只能编译打包TypeScript代码,其余文件无法一同构建到dist文件夹。

开发依赖

ts-node-dev:和 nodemon功能类似,只不过该软件包支持运行ts文件。想要监听文件变化需要加上--respawn参数。

typescript:TypeScript 环境支持。

npm-run-all:支持同时运行多个npm指令。

@types/nodenode编码辅助。

执行npx tsc --init生成tsconfig.json:我使用的配置如下,大家可以根据自己的需求配置。

{
 "compilerOptions": {
    "target": "esnext", // 目标语言版本
    "module": "commonjs", // 指定生成代码的模板标准
    "sourceMap": true,
    "outDir": "./dist", // 指定输出目录, 默认是dist文件夹
    "rootDir": "./src",  
    "strict": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true
 },
 // 需要编译的的文件和目录
 "include": ["src"],
 "exclude": ["node_modules", "dist", "public"]
}

10月24日(1).gif

修改package.json

"scripts":%20{ "dev":%20"cross-env%20NODE_ENV=development%20tsnd%20--respawn%20src/main.ts",%20//%20开发环境执行的脚本命令,设置环境变量并监听入口文件的变化 "build":%20"run-s%20clearBuild%20compile%20copyPublic",%20//%20将TypeScript项目打包成JavaScript项目 "clearBuild":%20"rimraf%20dist/*",%20//%20在构建的时候清空dist目录 "compile":%20"tsc",%20//%20根据tsconfig.json的配置编译TypeScript "copyPublic":%20"copyfiles%20-u%201%20src/public/*%20dist",%20//%20有一些资源是需要我们在dist和src之间来回拷贝的,可以借助该命令实现拷贝 //%20其余部分可以按照自己项目最终的部署方式自定义 "serve":%20"cross-env%20NODE_ENV=production%20node%20dist/main.js", "start":%20"pm2%20start%20ecosystem.config.js", "stop":%20"pm2%20stop%20ecosystem.config.js", "restart":%20"pm2%20restart%20ecosystem.config.js", "delete":%20"pm2%20delete%20ecosystem.config.js" },

然后在项目上线后,就可以直接通过nodepm2等命令直接运行dist文件夹下打包好的js文件即可。

image.png

从.env中加载环境变量

因为我们已经通过脚本命令为不同的指令设置的环境变量,同时又引入了dotenv来加载.env中的环境变量。

这时我们就可以通过不同的来加载不同的.env%20文件来获取里面配置的不同参数,在这里我参照Create%20React%20App%20官方的.env文件的加载优先级。

npm%20run%20devenv.development.local%20>.env.local>%20.env.development>%20.env

npm%20run%20serverenv.production.local%20>.env.local>%20.env.production>%20.env

const%20pathResolve%20=%20(str:%20string) : string%20=>%20path.resolve(process.cwd(),%20str); const%20processENV%20=%20process.env.NODE_ENV const%20isDev%20=%20processENV%20===%20"development" try%20{ %20%20%20%20const%20filename%20=%20isDev%20?%20"./.env"%20:%20"./.env" %20%20%20%20dotenv.config({path:%20pathResolve(filename)}); }%20catch%20(err)%20{ %20%20%20%20console.log(`${pathResolve(filename)}%20不存在`); } try%20{ %20%20%20%20const%20filename%20=%20isDev%20?%20"./.env.development"%20:%20"./.env.production" %20%20%20%20dotenv.config({path:%20pathResolve(filename)}); }%20catch%20(err)%20{ %20%20%20%20console.log(`${pathResolve(filename)}%20不存在`); } try%20{ %20%20%20%20const%20filename%20=%20isDev%20?%20"./.env.local"%20:%20"./.env.local" %20%20%20%20dotenv.config({path:%20pathResolve(filename)}); }%20catch%20(err)%20{ %20%20%20%20console.log(`${pathResolve(filename)}%20不存在`); } try%20{ %20%20%20%20const%20filename%20=%20isDev%20?%20"./.env.development.local"%20:%20"./.env.production.local" %20%20%20%20dotenv.config({path:%20pathResolve(filename)}); }%20catch%20(err)%20{ php%20%20%20%20console.log(`${pathResolve(filename)}%20不存在`); }

我这里的话,只用到了两个环境,developmentproduction,如果还要有测试等环境时,按需配置和加载即可。

配置路径别名

使用module-alias我们就可以轻松的配置使用路径别名,从此和const%20userData%20=%20require('../../file/user.json')这种路径说拜拜。

我们只需要使用const%20userData%20=%20require("@/file/user.json")这种引入方式引入数据,看起来结构更清晰。

用法

将自定义的路径别名添加在package.json中:

"_moduleAliases":%20{ "@":%20"./src", "@app":%20"./src/app" }

同时也要在tsconfig.json中添加路径别名,否则编辑器会报错,同时也会编译不过去。

然后在应用程序的主文件中添加如下代码:

import "module-alias/register";

一切准备就后,就可以使用一些我们自己定制的路径别名来引入相应的文件了模块了。

更高级的用法参照官方文档来学习:github.com/ilearnio/mo…

Kapture 2022-10-24 at 18.47.28.gif

目录规范

编码风格规范

Eslint

yarn add eslint -D
# 初始化Eslint的配置文件,会在项目根目录下生成Eslint的配置文件
npx eslint --init

image.png

在生成好的Eslint中加入parserOptions.project配置项:

接着我们运行npx eslint src/** --fixEslint 就会帮助我们自动格式化代码。

Kapture 2022-10-24 at 20.26.33.gif

package.json,添加Eslint的运行命令:

"script": {
//......
"lint:fix": "eslint --fix --ext .js,.ts,.tsx ."
}

同时配置Eslint的忽略文件.eslintignore

dist
node_modules
.idea
.DS_Store

ok,现在我们在格式化的时候执行npm run lint:fix即可。

以上就是koa TS ESLint搭建服务器重构版过程详解的详细内容,更多关于koa TS ESLint 搭建服务器的资料请关注我们其它相关文章!