1, .husky文件
由于代碼校驗(yàn)工具需要每次手動(dòng)使用命令執(zhí)行,才會(huì)格式化項(xiàng)目代碼漱病,這樣很容易讓人忘記執(zhí)行就把代碼提交了。
husky的作用就是在代碼提交之前觸發(fā)git hook(git在客戶端的鉤子)把曼,然后執(zhí)行pnpm run format來自動(dòng)的格式化我們的代碼杨帽。
-
eslint文件
image.png
eslint 它的目標(biāo)是提供一個(gè)插件化的JavaScript代碼檢測工具。雖然項(xiàng)目里使用了TypeScript嗤军,但TypeScript也是JavaScript的超集注盈,所以也是可以使用eslint 進(jìn)行檢查的。eslintrc.js里面的配置很多就不細(xì)細(xì)解讀了
module.exports = {
env: {
browser: true,
es2021: true,
node: true,
jest: true,
},
/* 指定如何解析語法 */
parser: 'vue-eslint-parser',
/** 優(yōu)先級(jí)低于 parse 的語法解析配置 */
parserOptions: {
ecmaVersion: 'latest',
sourceType: 'module',
parser: '@typescript-eslint/parser',
jsxPragma: 'React',
ecmaFeatures: {
jsx: true,
},
},
/* 繼承已有的規(guī)則 */
extends: [
'eslint:recommended',
'plugin:vue/vue3-essential',
'plugin:@typescript-eslint/recommended',
'plugin:prettier/recommended',
],
plugins: ['vue', '@typescript-eslint'],
/*
* "off" 或 0 ==> 關(guān)閉規(guī)則
* "warn" 或 1 ==> 打開的規(guī)則作為警告(不影響代碼執(zhí)行)
* "error" 或 2 ==> 規(guī)則作為一個(gè)錯(cuò)誤(代碼不能執(zhí)行叙赚,界面報(bào)錯(cuò))
*/
rules: {
// eslint(https://eslint.bootcss.com/docs/rules/)
'no-var': 'error', // 要求使用 let 或 const 而不是 var
'no-multiple-empty-lines': ['warn', { max: 1 }], // 不允許多個(gè)空行
'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
'no-unexpected-multiline': 'error', // 禁止空余的多行
'no-useless-escape': 'off', // 禁止不必要的轉(zhuǎn)義字符
// typeScript (https://typescript-eslint.io/rules)
'@typescript-eslint/no-unused-vars': 'error', // 禁止定義未使用的變量
'@typescript-eslint/prefer-ts-expect-error': 'error', // 禁止使用 @ts-ignore
'@typescript-eslint/no-explicit-any': 'off', // 禁止使用 any 類型
'@typescript-eslint/no-non-null-assertion': 'off',
'@typescript-eslint/no-namespace': 'off', // 禁止使用自定義 TypeScript 模塊和命名空間老客。
'@typescript-eslint/semi': 'off',
// eslint-plugin-vue (https://eslint.vuejs.org/rules/)
'vue/multi-word-component-names': 'off', // 要求組件名稱始終為 “-” 鏈接的單詞
'vue/script-setup-uses-vars': 'error', // 防止<script setup>使用的變量<template>被標(biāo)記為未使用
'vue/no-mutating-props': 'off', // 不允許組件 prop的改變
'vue/attribute-hyphenation': 'off', // 對模板中的自定義組件強(qiáng)制執(zhí)行屬性命名樣式
},
};
.eslintignore 文件是一個(gè)忽略文件,主要是為了忽略對于哪些文件不需要進(jìn)行代碼校驗(yàn)震叮。比如node_modules文件胧砰、打包后的dist文件等;
# Eslint 會(huì)忽略的文件
.DS_Store
node_modules
dist
dist-ssr
*.local
.npmrc
3.prettier.config.js苇瓣、prettierignore文件
有了eslint朴则,為什么還要有prettier? eslint針對的是javascript,他是一個(gè)檢測工具钓简,包含js語法以及少部分格式問題,在eslint看來汹想,語法對了就能保證代碼正常運(yùn)行外邓,格式問題屬于其次;
而prettier屬于格式化工具,它看不慣格式不統(tǒng)一古掏,所以它就把eslint沒干好的事接著干损话,另外,prettier支持
包含js在內(nèi)的多種語言。
總結(jié)起來丧枪,eslint和prettier這倆兄弟一個(gè)保證js代碼質(zhì)量光涂,一個(gè)保證代碼美觀。
prettier.config.js內(nèi)主要配置如下:
/** 配置項(xiàng)文檔:https://prettier.io/docs/en/configuration.html */
module.exports = {
/** 每一行的寬度 */
printWidth: 120,
/** Tab 鍵的空格數(shù) */
tabWidth: 2,
/** 在對象中的括號(hào)之間是否用空格來間隔 */
bracketSpacing: true,
/** 箭頭函數(shù)的參數(shù)無論有幾個(gè)拧烦,都要括號(hào)包裹 */
arrowParens: "always",
/** 換行符的使用 */
endOfLine: "auto",
/** 是否采用單引號(hào) */
singleQuote: false,
/** 對象或者數(shù)組的最后一個(gè)元素后面不要加逗號(hào) */
trailingComma: "none",
/** 是否加分號(hào) */
semi: false,
/** 是否使用 Tab 格式化 */
useTabs: false
}
prettierignore和eslintignore 類似忘闻,忽略以下不需要格式化的文件
# Prettier 會(huì)忽略的文件
.DS_Store
node_modules
dist
dist-ssr
*.local
.npmrc
4.環(huán)境變量的配置
項(xiàng)目開發(fā)過程中,至少會(huì)經(jīng)歷開發(fā)環(huán)境恋博、測試環(huán)境和生產(chǎn)環(huán)境(即正式環(huán)境)三個(gè)階段齐佳。不同階段請求的狀態(tài)(如接口地址等)不盡相同,若手動(dòng)切換接口地址是相當(dāng)繁瑣且易出錯(cuò)的债沮。于是環(huán)境變量配置的需求就應(yīng)運(yùn)而生炼吴,我們只需做簡單的配置,把環(huán)境狀態(tài)切換的工作交給代碼疫衩。
開發(fā)環(huán)境 (development)
顧名思義硅蹦,開發(fā)使用的環(huán)境,每位開發(fā)人員在自己的dev分支上干活闷煤,開發(fā)到一定程度童芹,同事會(huì)合并代碼,進(jìn)行聯(lián)調(diào)曹傀。
測試環(huán)境 (stagting)
測試同事干活的環(huán)境啦辐脖,一般會(huì)由測試同事自己來部署,然后在此環(huán)境進(jìn)行測試
生產(chǎn)環(huán)境(production)
生產(chǎn)環(huán)境是指正式提供對外服務(wù)的皆愉,一般會(huì)關(guān)掉錯(cuò)誤報(bào)告嗜价,打開錯(cuò)誤日志。(正式提供給客戶使用的環(huán)境幕庐。)
注意:一般情況下久锥,一個(gè)環(huán)境對應(yīng)一臺(tái)服務(wù),也有的公司開發(fā)與測試環(huán)境是一臺(tái)服務(wù)!!!
.env.development配置如下
# 自定義的環(huán)境變量(命名必須以 VITE_ 開頭)
## 后端接口公共路徑(如果解決跨域問題采用反向代理就只需寫公共路徑)
VITE_BASE_API = '/api/v1'
## 路由模式 hash 或 html5
VITE_ROUTER_HISTORY = 'hash'
## 開發(fā)環(huán)境地址前綴(一般 '/','./' 都可以)
VITE_PUBLIC_PATH = '/'
.env.production
# 自定義的環(huán)境變量(命名必須以 VITE_ 開頭)
## 后端接口公共路徑(如果解決跨域問題采用 CORS 就需要寫全路徑)
# VITE_BASE_API = 'https://mock.mengxuegu.com/mock/63218b5fb4c53348ed2bc212/api/v1'
VITE_BASE_API = 'https://www.fastmock.site/mock/761e2dda2b8890ab86c928a74e8f6538/api/v1'
## 路由模式 hash 或 html5
VITE_ROUTER_HISTORY = 'hash'
## 打包路徑(就是網(wǎng)站前綴异剥,例如部署到 https://un-pany.github.io/v3-admin-vite/ 域名下瑟由,就需要填寫 /v3-admin-vite/)
VITE_PUBLIC_PATH = '/v3-admin-vite/'
以獲取VITE_BASE_API 為例,我們在service.ts內(nèi)動(dòng)態(tài)獲取baseURL
配置運(yùn)行命令package.json
"scripts":{
"dev": "vite --open",
"build:test":"vue-tsc && vite build --mode stagting",
"build:pro": "vue-tsc && vite build --mode production",
"preview":"vite preview""
}
通過import.meta.env獲取環(huán)境變量
運(yùn)行pnpm run dev 和 pnpm run build:pro
import.meta.env.VITE_BASE_API 分別為 '/api/v1' 和 'https://www.fastmock.site/mock/761e2dda2b8890ab86c928a74e8f6538/api/v1'冤寿,以達(dá)到環(huán)境區(qū)分目的歹苦。