使用?Koa?+?TS?+?ESLlint?搭建node服務(wù)器的過程詳解
初始化項(xiàng)目

環(huán)境準(zhǔn)備
與之前使用JavaScript 開發(fā)后臺不同,區(qū)別如下:
- 自動編譯運(yùn)行的插件由
nodemon替換為ts-node-dev。 - 在
TypeScript環(huán)境下,需要使用到ES6模塊化規(guī)范。而非CommonJS規(guī)則。 - 使用
TypeScript語法進(jìn)行開發(fā),再開發(fā)結(jié)束后,需要進(jìn)行編譯打包為JavaScript去運(yùn)行。
安裝環(huán)境
yarn global add ts-node-dev typescript
ts-node-dev:與nodemon功能類似,在修改代碼之后,保存即可生效,無需手動重啟。
# 例如 ts-node-dev src/app.ts # 如果想要監(jiān)聽文件的改變需要加上 --respawn 參數(shù) ts-node-dev --respaswn src/app.ts # 使用簡短的別名 tsnd --respawn src/app.ts
初始化 tsconfig.json
# 生成tsconfig.json tsc --init
修改tsconfig.json如下:
{
"compilerOptions": {
"target": "esnext", // 目標(biāo)語言版本
"module": "commonjs", // 指定生成代碼的模板標(biāo)準(zhǔn)
"sourceMap": true,
"outDir": "./dist",
"rootDir": "./src", // 指定輸出目錄, 默認(rèn)是dist文件夾
"strict": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true
},
// 需要編譯的的文件和目錄
"include": ["src"],
"exclude": ["node_modules", "dist", "public"]
}簡單搭建 Koa 服務(wù)器
# 依賴安裝 yarn add koa yarn add typescript -D # 依賴注解 yarn add @types/koa -D
再app.ts中實(shí)例化一個服務(wù)器。
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('服務(wù)啟動成功,running http://127.0.0.1:3000')
})再package.json中添加調(diào)試腳本:
"scripts": {
"dev": "ts-node-dev --respawn app.ts"
}啟動服務(wù):

現(xiàn)在,我們使用Koa和TypeScript搭建了一個簡單的服務(wù)器,我們http://127.0.0.1:3000便可以再瀏覽器中看到”coderlzw“
完整項(xiàng)目搭建
依賴安裝
# 依賴安裝 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是一個零依賴的模塊,它能將環(huán)境變量中的變量從.env文件加載到process.env中。
在根目錄下創(chuàng)建
.env文件HOST=localhost PORT=3000
在
*.js/*.ts中使用import dotenv from 'dotenv' dotenv.config() const { PORT, HOST } = process.env
npm-run-all是一個批量執(zhí)行npm腳本的工具。
構(gòu)建目錄結(jié)構(gòu)
service ├─ package.json ├─ ??src │ ├─ ??app │ ├─ ??config │ ├─ ??constants │ ├─ ??controller │ ├─ ??main.ts │ ├─ ??middleware │ ├─ ??router │ ├─ ??service │ └─ ??utils ├─ .env ├─ tsconfig.json └─ yarn.lock

修改 package.json
{
"script": {
"dev": "tsnd --respawn src/main.ts",
"build": "npm-run-all resetFolder compile",
"compile": "tsc", // 編譯typescript
"resetFolder": "rimraf dist/*" // 清空dist文件夾
}
}當(dāng)我們在開發(fā)環(huán)境的時候,只需要執(zhí)行yarn dev即可成功啟動服務(wù)。
當(dāng)我們執(zhí)行編譯打包的時候,根據(jù)tsconfig.json中的配置輸出到指定的目錄。

在項(xiàng)目部署后,我們只需要運(yùn)行dist/main.js文件即可啟動服務(wù)。

代碼規(guī)范
eslint
官網(wǎng): eslint.bootcss.com
eslint能夠幫助我們規(guī)范編碼,比如字符串使用哪種引號,代碼結(jié)尾是否要有分號等等。
安裝依賴包
yarn add eslint -D
使用如下命令初始化
eslint配置,會在項(xiàng)目更目錄生成.eslintrc.js配置文件。eslint --init

接著我們在命令行執(zhí)行:npx eslint src/** --fix,執(zhí)行eslint提供的代碼的自動修復(fù)。

修改package.json,添加運(yùn)行腳本。
"scripts": {
"lint": "eslint src/** --fix", // 使用eslint規(guī)則格式化代碼
}現(xiàn)在我們可以通過命令來處理代碼風(fēng)格問題,但是我們更加希望在保存的時候自動處理代碼分格,這時候就需要使用到vscode編輯器的插件ESLint,通過此插件和vscode編輯器配置便可以實(shí)現(xiàn)保存的時候自動格式化代碼。
// vscode 配置自動格式化
"editor.codeActionsOnSave": {
"source.fixAll": true
}現(xiàn)在我們通過如上的配置,在保存的時候就會自動處理代碼風(fēng)格問題。
prettier
前面所提到的eslint主要做兩件事情,一是修復(fù)代碼質(zhì)量,二是修改代碼分格。
如果你不喜歡eslint自帶的格式化方式,就可以使用prettier來格式化代碼分格。
官網(wǎng): prettier.io/
yarn add prettier -D 復(fù)制代碼
在項(xiàng)目更目錄下配置.prettierrc
{
"useTabs": false,
"tabWidth": 2,
"printWidth": 100,
"singleQuote": true,
"trailingComma": "none",
"bracketSpacing": true,
"semi": false
}在項(xiàng)目更目錄運(yùn)行如下命令,格式化項(xiàng)目所有文件。
npx prettier --write .
但是當(dāng)我們執(zhí)行完后,會發(fā)現(xiàn)eslint又報(bào)錯了。這是因?yàn)?code>eslint和prettier的沖突所導(dǎo)致的。這時候我們需要關(guān)閉prettier與eslint格式所產(chǎn)生的沖突。
yarn add eslint-config-prettier -D
然后在.eslintrc.js加入perttier擴(kuò)展,配置后沖突的問題就解決了,代碼分格就由prettier來處理。
extends: ['standard', 'prettier']
現(xiàn)在我們希望在保存的時候按照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 // 駝峰命名
}
}最后,實(shí)現(xiàn)了一個小案例:gitee.com/coderlzw/ko…
到此這篇關(guān)于使用 Koa + TS + ESLlint 搭建node服務(wù)器的文章就介紹到這了,更多相關(guān)node服務(wù)器搭建內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
服務(wù)器封UDP和封國外是什么意思? 封UDP和封海外云服務(wù)器選擇!
很多人在租用高防云服務(wù)器的時候,都會看到關(guān)于防御會有介紹是否封國外、封UDP,封海外就是封住海外的攻擊,而封UDP則使UDP攻擊無效,所以防御上面封UDP的機(jī)器比不封UDP的要強(qiáng)一些,下面給大家簡單介紹一下封UDP和封國外是什么意思,有什么用2023-05-05
IBM X346 板載 Raid1 功能啟用及Win2003系統(tǒng)安裝小記
有兩臺IBM X346 m/t-8840-cdr 服務(wù)器,板載raid控制器版本號為v.4.30.9,硬盤位0,1各裝一塊146G IBM 原裝SCSI硬盤。2011-04-04
寶塔面板phpMyadmin數(shù)據(jù)庫管理出現(xiàn)500錯誤的解決方法
寶塔面板phpMyadmin數(shù)據(jù)庫管理出現(xiàn)500錯誤的解決方法,經(jīng)常會出現(xiàn)數(shù)據(jù)庫管理phpMyadmin打不開,或則出現(xiàn)500內(nèi)部服務(wù)器錯誤,本文介紹如果出現(xiàn)這個問題該如何解決2023-08-08

