使用TS來(lái)編寫(xiě)express服務(wù)器的方法步驟
1. 前言
作為前端開(kāi)發(fā)人員而言,ts已經(jīng)成為了一項(xiàng)必不可少的技能,類(lèi)型檢查可以幫助我們?cè)匍_(kāi)發(fā)時(shí)避免一些不必要的bug,而且ts支持的類(lèi)和裝飾器等語(yǔ)法也更逼近后端語(yǔ)言,更適合服務(wù)器的開(kāi)發(fā)。
本文將從零開(kāi)始,搭建一個(gè)集成ts和eslint語(yǔ)法檢查的express服務(wù)器。
2. 初始化express框架
我們可以使用官方提供的express生成器來(lái)快速生成express框架。
當(dāng)然,express的初始化內(nèi)容并不復(fù)雜,你也可以從一個(gè)app.js開(kāi)始搭建自己喜歡的框架模式。
# 使用express生成器之前必須全局安裝過(guò)express-generator $ npm install -g express-generator # --view后面是確定你使用哪種視圖引擎,server是你工程的名稱(chēng) $ express --view ejs server # 生成的工程并不會(huì)默認(rèn)給我們添加git,這里我們使用git init初始化一下 $ git init
初始化完成后我們添加一個(gè).gitignore文件
node_modules/ dist/
3. 添加TS支持
全局安裝TS
ts本身屬于js的超集,node和瀏覽器并不認(rèn)識(shí),執(zhí)行前需要先編譯成js,所以沒(méi)有全局安裝過(guò)ts的需要先全局安裝一下
$ npm install -g typescript
安裝express類(lèi)型依賴(lài)
express是基于node環(huán)境的,所以我們需要安裝兩個(gè)類(lèi)型依賴(lài),以獲得相關(guān)api的類(lèi)型提示
$ npm install @types/node --save-dev $ npm install @types/express --save-dev
配置tsconfig.json文件
在項(xiàng)目根目錄下新建tsconfig.json文件,outDir表示打包輸出路徑
{ "compilerOptions": { "target": "es2016", "module": "commonjs", "lib": ["es2016","dom"], "outDir": "./dist", }, "exclude": ["node_modules"] }
這里如果包含了include或者files選項(xiàng),將不會(huì)默認(rèn)編譯所有ts文件。
接下來(lái)我們可以把項(xiàng)目的所以js文件的后綴改為.ts,然后直接在命令行運(yùn)行
$ tsc
默認(rèn)會(huì)找到根目錄下的tsconfig.json文件,按照配置幫我們進(jìn)行編譯,編譯完成我們可以看到dist文件夾已經(jīng)將所有ts文件編譯成了js文件,而且保持了原來(lái)的目錄結(jié)構(gòu)。
接下來(lái)我們將目錄下的其他資源也放入dist文件夾下,然后運(yùn)行
$ node ./dist/bin/www
這時(shí)我們的服務(wù)已經(jīng)可以正常啟動(dòng)了,但是在開(kāi)發(fā)時(shí)如果每次運(yùn)行都要進(jìn)行編譯->將資源文件移入->運(yùn)行命令的流程,那也太繁瑣了,所以接下來(lái)我們?cè)偬砑右粋€(gè)第三方庫(kù)ts-node。
使用ts-node將ts文件編譯在內(nèi)存中
在使用ts-node之前需要進(jìn)行全局安裝
$ npm install ts-node -g # 用ts-node直接運(yùn)行項(xiàng)目,這個(gè)庫(kù)會(huì)將我們的ts文件編譯成js文件保存在內(nèi)存中進(jìn)行引用 $ ts-node ./bin/www
雖然ts-node可以幫我們直接運(yùn)行ts文件,但在開(kāi)發(fā)完成后部署在生產(chǎn)環(huán)境時(shí),還是推薦使用tsc打包出來(lái)的js文件會(huì)更加穩(wěn)定。
使用nodemon進(jìn)行熱更新
全局安裝nodemon
$ npm install nodemon -g # 執(zhí)行命令運(yùn)行項(xiàng)目 $ nodemon -e ts --exec ts-node ./bin/www
-e:表示指定觀察列表 (Specifying extension watch list)
--exec:代表命令行形式執(zhí)行命令
配置npm腳本
"scripts": { "start": "ts-node ./bin/www", "dev": "nodemon -e ts --exec ts-node ./bin/www", "build": "tsc", "server": "node ./dist/bin/www" }
4. 配置eslint
為什么不是tslint?
TSLint is deprecated.
See this issue for more details: Roadmap: TSLint → ESLint. If you're interested in helping with the TSLint/ESLint migration, please check out our OSS Fellowship program.
這是tslint團(tuán)隊(duì)給出的答案,目前推薦使用的是typescript-eslint。
為項(xiàng)目配置eslint
# 未全局安裝的需要全局安裝 $ npm install eslint -g $ eslint --init √ How would you like to use ESLint? · style √ What type of modules does your project use? · commonjs √ Which framework does your project use? · none √ Does your project use TypeScript? · Yes √ Where does your code run? · node √ How would you like to define a style for your project? · guide √ Which style guide do you want to follow? · standard √ What format do you want your config file to be in? · JavaScript Checking peerDependencies of eslint-config-standard@latest Local ESLint installation not found. The config that you've selected requires the following dependencies: @typescript-eslint/eslint-plugin@latest eslint-config-standard@latest eslint@>=7.11.0 eslint-plugin-import@>=2.22.1 eslint-plugin-node@>=11.1.0 eslint-plugin-promise@>=4.2.1 eslint-plugin-standard@>=4.0.2 @typescript-eslint/parser@latest √ Would you like to install them now with npm? · Yes
關(guān)于eslint初始化的步驟還是比較簡(jiǎn)單易懂的,這里不展開(kāi)敘述,關(guān)鍵一條:Does your project use TypeScript? · Yes
使用eslint命令行初始化后的項(xiàng)目還并沒(méi)有開(kāi)啟對(duì)于ts相關(guān)語(yǔ)法的檢查,這里需要在.eslintrc.js文件增加兩條配置
extends: [ 'standard', 'eslint:recommended', 'plugin:@typescript-eslint/recommended' ]
接下來(lái)我們會(huì)看到ts文件的一堆報(bào)錯(cuò),就可以愉快的安裝ts語(yǔ)法進(jìn)行修改啦!
提示:ts對(duì)于commonjs的模塊化語(yǔ)法并沒(méi)有完全的支持,所以在使用require和module.exports時(shí)很容易遇到各種報(bào)錯(cuò),官方也
推薦了一些解決方式,這里推薦啟用ES模塊導(dǎo)入模式
{ "compilerOptions": { ... "esModuleInterop": true } }
這樣就可以在項(xiàng)目中使用es6的import和export進(jìn)行模塊化了,ts在編譯時(shí)會(huì)根據(jù)環(huán)境對(duì)我們的代碼進(jìn)行兼容性編譯。
5. 小結(jié)
本文是本人在搭建自己express服務(wù)器并集成ts開(kāi)發(fā)時(shí)所記錄的一些操作,如有錯(cuò)誤之處,還請(qǐng)多多指點(diǎn)!
到此這篇關(guān)于使用TS來(lái)編寫(xiě)express服務(wù)器的方法步驟的文章就介紹到這了,更多相關(guān)TypeScript express服務(wù)器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- node.js中express模塊創(chuàng)建服務(wù)器和http模塊客戶(hù)端發(fā)請(qǐng)求
- node.js的Express服務(wù)器基本使用教程
- nodejs express配置自簽名https服務(wù)器的方法
- 把vue-router和express項(xiàng)目部署到服務(wù)器的方法
- 使用express搭建一個(gè)簡(jiǎn)單的查詢(xún)服務(wù)器的方法
- node通過(guò)express搭建自己的服務(wù)器
- vue 打包后的文件部署到express服務(wù)器上的方法
- Express與NodeJs創(chuàng)建服務(wù)器的兩種方法
相關(guān)文章
JavaScript實(shí)現(xiàn)動(dòng)態(tài)表格效果
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)動(dòng)態(tài)表格效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06button沒(méi)寫(xiě)type=button會(huì)導(dǎo)致點(diǎn)擊時(shí)提交
點(diǎn)擊了一個(gè)彈窗中的按鈕,想到彈窗消失了,經(jīng)測(cè)試后發(fā)現(xiàn)button 沒(méi)寫(xiě)type=button會(huì)導(dǎo)致點(diǎn)擊時(shí)提交2014-03-03top.location.href 沒(méi)有權(quán)限 解決方法
以前好像沒(méi)有遇到這問(wèn)題,也可能是沒(méi)有在意吧,我的blog內(nèi)容頁(yè)都是有判斷的,規(guī)則是,如果top.location不是內(nèi)容頁(yè)的話就跳到內(nèi)容頁(yè)2008-08-08javascript實(shí)現(xiàn)的文字加密解密
javascript實(shí)現(xiàn)的文字加密解密...2007-06-06js控制文本框只輸入數(shù)字和小數(shù)點(diǎn)的方法
這篇文章主要介紹了js控制文本框只輸入數(shù)字和小數(shù)點(diǎn)的方法,實(shí)例分析了javascript使用正則表達(dá)式實(shí)現(xiàn)限制數(shù)字和小數(shù)點(diǎn)的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03JS實(shí)現(xiàn)的手機(jī)端精簡(jiǎn)幻燈片效果
這篇文章主要介紹了JS實(shí)現(xiàn)的手機(jī)端精簡(jiǎn)幻燈片效果,涉及javascript結(jié)合時(shí)間函數(shù)動(dòng)態(tài)修改頁(yè)面元素的相關(guān)技巧,需要的朋友可以參考下2016-09-09JavaScript代碼實(shí)現(xiàn)簡(jiǎn)單計(jì)算器
這篇文章主要為大家詳細(xì)介紹了JavaScript代碼實(shí)現(xiàn)簡(jiǎn)單計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-12-12Layui 解決表格異步調(diào)用后臺(tái)分頁(yè)的問(wèn)題
今天小編就為大家分享一篇Layui 解決表格異步調(diào)用后臺(tái)分頁(yè)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-10-10