<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
yarn init -y
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/node
:node
編碼輔助。
執行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"] }
"scripts": { "dev": "cross-env NODE_ENV=development tsnd --respawn src/main.ts", // 開發環境執行的指令碼命令,設定環境變數並監聽入口檔案的變化 "build": "run-s clearBuild compile copyPublic", // 將TypeScript專案打包成JavaScript專案 "clearBuild": "rimraf dist/*", // 在構建的時候清空dist目錄 "compile": "tsc", // 根據tsconfig.json的設定編譯TypeScript "copyPublic": "copyfiles -u 1 src/public/* dist", // 有一些資源是需要我們在dist和src之間來回拷貝的,可以藉助該命令實現拷貝 // 其餘部分可以按照自己專案最終的部署方式自定義 "serve": "cross-env NODE_ENV=production node dist/main.js", "start": "pm2 start ecosystem.config.js", "stop": "pm2 stop ecosystem.config.js", "restart": "pm2 restart ecosystem.config.js", "delete": "pm2 delete ecosystem.config.js" },
然後在專案上線後,就可以直接通過node
、pm2
等命令直接執行dist
資料夾下打包好的js檔案即可。
因為我們已經通過指令碼命令為不同的指令設定的環境變數,同時又引入了dotenv
來載入.env
中的環境變數。
這時我們就可以通過不同的來載入不同的.env
檔案來獲取裡面設定的不同引數,在這裡我參照Create React App 官方的.env
檔案的載入優先順序。
npm run dev
:env.development.local
>.env.local
> .env.development
> .env
npm run server
:env.production.local
>.env.local
> .env.production
> .env
const pathResolve = (str: string) : string => path.resolve(process.cwd(), str); const processENV = process.env.NODE_ENV const isDev = processENV === "development" try { const filename = isDev ? "./.env" : "./.env" dotenv.config({path: pathResolve(filename)}); } catch (err) { console.log(`${pathResolve(filename)} 不存在`); } try { const filename = isDev ? "./.env.development" : "./.env.production" dotenv.config({path: pathResolve(filename)}); } catch (err) { console.log(`${pathResolve(filename)} 不存在`); } try { const filename = isDev ? "./.env.local" : "./.env.local" dotenv.config({path: pathResolve(filename)}); } catch (err) { console.log(`${pathResolve(filename)} 不存在`); } try { const filename = isDev ? "./.env.development.local" : "./.env.production.local" dotenv.config({path: pathResolve(filename)}); } catch (err) { console.log(`${pathResolve(filename)} 不存在`); }
我這裡的話,只用到了兩個環境,development
和production
,如果還要有測試等環境時,按需設定和載入即可。
使用module-alias
我們就可以輕鬆的設定使用路徑別名,從此和const userData = require('../../file/user.json')
這種路徑說拜拜。
我們只需要使用const userData = require("@/file/user.json")
這種引入方式引入資料,看起來結構更清晰。
將自定義的路徑別名新增在package.json
中:
"_moduleAliases": { "@": "./src", "@app": "./src/app" }
同時也要在tsconfig.json
中新增路徑別名,否則編輯器會報錯,同時也會編譯不過去。
然後在應用程式的主檔案中新增如下程式碼:
import "module-alias/register";
一切準備就後,就可以使用一些我們自己客製化的路徑別名來引入相應的檔案了模組了。
更高階的用法參照官方檔案來學習:github.com/ilearnio/mo…
yarn add eslint -D # 初始化Eslint的組態檔,會在專案根目錄下生成Eslint的組態檔 npx eslint --init
在生成好的Eslint
中加入parserOptions.project
設定項:
接著我們執行npx eslint src/** --fix
Eslint 就會幫助我們自動格式化程式碼。
在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 搭建伺服器的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45