使用 Koa + TS + ESLlint 搭建node服务器的过程详解


Posted in NodeJs onMay 30, 2022

初始化项目

使用 Koa + TS + ESLlint 搭建node服务器的过程详解

环境准备

与之前使用JavaScript 开发后台不同,区别如下:

  • 自动编译运行的插件由nodemon替换为ts-node-dev
  • TypeScript环境下,需要使用到ES6模块化规范。而非CommonJS规则。
  • 使用TypeScript语法进行开发,再开发结束后,需要进行编译打包为JavaScript去运行。

安装环境

yarn global add ts-node-dev typescript

ts-node-dev:与nodemon功能类似,在修改代码之后,保存即可生效,无需手动重启。

# 例如
ts-node-dev src/app.ts

# 如果想要监听文件的改变需要加上 --respawn 参数
ts-node-dev --respaswn src/app.ts

# 使用简短的别名
tsnd --respawn src/app.ts

初始化 tsconfig.json

# 生成tsconfig.json
tsc --init

修改tsconfig.json如下:

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

简单搭建 Koa 服务器

# 依赖安装
yarn add koa
yarn add typescript -D
# 依赖注解
yarn add @types/koa -D

app.ts中实例化一个服务器。

import Koa, { DefaultContext, DefaultState, Context } from 'Koa'
const app: Koa<DefaultState, DefaultContext> = new Koa()
app.use(async (ctx: Context) => {
	ctx.body = 'coderlzw'
})
app.listen(3000, () => {
	console.log('服务启动成功,running http://127.0.0.1:3000')
})

package.json中添加调试脚本:

"scripts": {
  "dev": "ts-node-dev --respawn app.ts"
}

启动服务:

使用 Koa + TS + ESLlint 搭建node服务器的过程详解

现在,我们使用KoaTypeScript搭建了一个简单的服务器,我们http://127.0.0.1:3000便可以再浏览器中看到”coderlzw“

完整项目搭建

依赖安装

# 依赖安装
yarn add koa koa-router koa-cors koa-bodyparser dotenv
yarn add ts-node-dev npm-run-all typescript -D
# 依赖注解
yarn add @types/koa @types/koa-bodyparser @types/koa-router  @types/koa-cors -D

dotenv是一个零依赖的模块,它能将环境变量中的变量从.env文件加载到process.env中。

  • 在根目录下创建.env文件

    HOST=localhost
    PORT=3000
  • *.js/*.ts中使用

    import dotenv from 'dotenv'
    dotenv.config()
    const { PORT, HOST } = process.env

npm-run-all是一个批量执行npm脚本的工具。

构建目录结构

service
├─ package.json
├─ ?src
│   ├─ ?app
│   ├─ ?config
│   ├─ ?constants
│   ├─ ?controller
│   ├─ ?main.ts
│   ├─ ?middleware
│   ├─ ?router
│   ├─ ?service
│   └─ ?utils
├─ .env
├─ tsconfig.json
└─ yarn.lock

使用 Koa + TS + ESLlint 搭建node服务器的过程详解

修改 package.json

{
	"script": {
		"dev": "tsnd --respawn src/main.ts",
		"build": "npm-run-all resetFolder compile",
		"compile": "tsc", // 编译typescript
		"resetFolder": "rimraf dist/*" // 清空dist文件夹
	}
}

当我们在开发环境的时候,只需要执行yarn dev即可成功启动服务。

当我们执行编译打包的时候,根据tsconfig.json中的配置输出到指定的目录。

使用 Koa + TS + ESLlint 搭建node服务器的过程详解

在项目部署后,我们只需要运行dist/main.js文件即可启动服务。

使用 Koa + TS + ESLlint 搭建node服务器的过程详解

代码规范

eslint

官网: eslint.bootcss.com

eslint能够帮助我们规范编码,比如字符串使用哪种引号,代码结尾是否要有分号等等。

  • 安装依赖包

    yarn add eslint -D
  • 使用如下命令初始化eslint配置,会在项目更目录生成.eslintrc.js配置文件。

    eslint --init

    使用 Koa + TS + ESLlint 搭建node服务器的过程详解

接着我们在命令行执行:npx eslint src/** --fix,执行eslint提供的代码的自动修复。

使用 Koa + TS + ESLlint 搭建node服务器的过程详解

修改package.json,添加运行脚本。

"scripts": {
    "lint": "eslint src/** --fix",		// 使用eslint规则格式化代码
 }

现在我们可以通过命令来处理代码风格问题,但是我们更加希望在保存的时候自动处理代码分格,这时候就需要使用到vscode编辑器的插件ESLint,通过此插件和vscode编辑器配置便可以实现保存的时候自动格式化代码。

// vscode 配置自动格式化
"editor.codeActionsOnSave": {
    "source.fixAll": true
 }

现在我们通过如上的配置,在保存的时候就会自动处理代码风格问题。

prettier

前面所提到的eslint主要做两件事情,一是修复代码质量,二是修改代码分格。

如果你不喜欢eslint自带的格式化方式,就可以使用prettier来格式化代码分格。

官网: prettier.io/

yarn add prettier -D
复制代码

在项目更目录下配置.prettierrc

{
	"useTabs": false,
	"tabWidth": 2,
	"printWidth": 100,
	"singleQuote": true,
	"trailingComma": "none",
	"bracketSpacing": true,
	"semi": false
}

在项目更目录运行如下命令,格式化项目所有文件。

npx prettier --write .

但是当我们执行完后,会发现eslint又报错了。这是因为eslintprettier的冲突所导致的。这时候我们需要关闭prettiereslint格式所产生的冲突。

yarn add eslint-config-prettier -D

然后在.eslintrc.js加入perttier扩展,配置后冲突的问题就解决了,代码分格就由prettier来处理。

extends: ['standard', 'prettier']

现在我们希望在保存的时候按照prettier的代码分格格式化代码。eslint-plugin-prettier

yarn add eslint-plugin-prettier -D

eslintrc.js的最终配置如下:

module.exports = {
	env: {
		browser: true,
		es2021: true
	},
	extends: ['standard', 'plugin:prettier/recommended'], // 修改此处
	parser: '@typescript-eslint/parser',
	parserOptions: {
		ecmaVersion: 'latest',
		sourceType: 'module'
	},
	plugins: ['@typescript-eslint'],
	rules: {
		camelcase: 0 // 驼峰命名
	}
}

最后,实现了一个小案例:gitee.com/coderlzw/ko…

到此这篇关于使用 Koa + TS + ESLlint 搭建node服务器的文章就介绍到这了!

NodeJs 相关文章推荐
golang、python、php、c++、c、java、Nodejs性能对比
Mar 12 NodeJs
nodejs的require模块(文件模块/核心模块)及路径介绍
Jan 14 NodeJs
nodejs npm包管理的配置方法及常用命令介绍
Jun 05 NodeJs
Nodejs实现的一个简单udp广播服务器、客户端
Sep 25 NodeJs
NodeJS学习笔记之Connect中间件应用实例
Jan 27 NodeJs
使用nodejs开发cli项目实例
Jun 03 NodeJs
async/await与promise(nodejs中的异步操作问题)
Mar 03 NodeJs
NodeJS、NPM安装配置步骤(windows版本) 以及环境变量详解
May 13 NodeJs
让nodeJS支持ES6的词法----babel的安装和使用方法
Jul 31 NodeJs
nodejs中art-template模板语法的引入及冲突解决方案
Nov 07 NodeJs
nodejs npm错误Error:UNKNOWN:unknown error,mkdir 'D:\Develop\nodejs\node_global'at Error
Mar 02 NodeJs
浅谈vue websocket nodeJS 进行实时通信踩到的坑
Sep 22 NodeJs
浅谈Node的内存泄露问题
May 06 #NodeJs
分享node.js实现简单登录注册的具体代码
Apr 26 #NodeJs
分享五个Node.js开发的优秀实践 
Apr 07 #NodeJs
Node.js实现爬取网站图片的示例代码
NodeJs使用webpack打包项目的方法详解
Feb 28 #NodeJs
node快速搭建后台的实现步骤
nodejs利用readline提示输入内容实例代码
You might like
把77A收信机改造成收音机
2021/03/02 无线电
flash用php连接数据库的代码
2011/04/21 PHP
PHP中通过语义URL防止网站被攻击的方法分享
2011/09/08 PHP
yii添删改查实例
2015/11/16 PHP
php通过PHPExcel导入Excel表格到MySQL数据库的简单实例
2016/10/29 PHP
基于laravel-admin 后台 列表标签背景的使用方法
2019/10/03 PHP
关于laravel 日志写入失败问题汇总
2019/10/17 PHP
javascript游戏开发之《三国志曹操传》零部件开发(二)人物行走的实现
2013/01/23 Javascript
node.js中的require使用详解
2014/12/15 Javascript
JS表单验证方法实例小结【电话、身份证号、Email、中文、特殊字符、身份证号等】
2017/02/14 Javascript
最全正则表达式总结:验证QQ号、手机号、Email、中文、邮编、身份证、IP地址等
2017/08/16 Javascript
Vue 父子组件的数据传递、修改和更新方法
2018/03/01 Javascript
Vue 莹石摄像头直播视频实例代码
2018/08/31 Javascript
nodejs 使用 js 模块的方法实例详解
2018/12/04 NodeJs
微信小程序如何使用云开发
2019/05/17 Javascript
jQuery加PHP实现图片上传并提交的示例代码
2020/07/16 jQuery
解决VUE项目localhost端口服务器拒绝连接,只能用127.0.0.1的问题
2020/08/14 Javascript
Python中使用dom模块生成XML文件示例
2015/04/05 Python
Python打印斐波拉契数列实例
2015/07/07 Python
Python验证码识别的方法
2015/07/10 Python
图解Python变量与赋值
2018/04/03 Python
Python迭代器Iterable判断方法解析
2020/03/16 Python
python 如何将office文件转换为PDF
2020/09/22 Python
python爬虫用scrapy获取影片的实例分析
2020/11/23 Python
Python Selenium XPath根据文本内容查找元素的方法
2020/12/07 Python
NUK奶瓶美国官网:NUK美国
2016/09/26 全球购物
美国钻石商店:Zales
2016/11/20 全球购物
菲律宾旅游网站:Expedia菲律宾
2017/10/11 全球购物
中科创达面试题
2016/12/28 面试题
遥感技术与仪器求职信
2014/02/22 职场文书
一句话工作感言
2014/03/01 职场文书
文明生主要事迹
2014/05/25 职场文书
我们的节日元宵活动方案
2014/08/23 职场文书
Go语言操作数据库及其常规操作的示例代码
2021/04/21 Golang
python引入其他文件夹下的py文件具体方法
2021/05/23 Python
python 离散点图画法的实现
2022/04/01 Python