Vue+Vite+TS項(xiàng)目結(jié)構(gòu)詳解

企業(yè)微信截圖_16928408254070.png

1, .husky文件


image.png

由于代碼校驗(yàn)工具需要每次手動(dòng)使用命令執(zhí)行,才會(huì)格式化項(xiàng)目代碼漱病,這樣很容易讓人忘記執(zhí)行就把代碼提交了。
husky的作用就是在代碼提交之前觸發(fā)git hook(git在客戶端的鉤子)把曼,然后執(zhí)行pnpm run format來自動(dòng)的格式化我們的代碼杨帽。

  1. 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文件


image.png

有了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)境變量的配置


image.png

項(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


image.png

配置運(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ū)分目的歹苦。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市督怜,隨后出現(xiàn)的幾起案子殴瘦,更是在濱河造成了極大的恐慌,老刑警劉巖号杠,帶你破解...
    沈念sama閱讀 219,490評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蚪腋,死亡現(xiàn)場離奇詭異丰歌,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)屉凯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門立帖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人悠砚,你說我怎么就攤上這事晓勇。” “怎么了哩簿?”我有些...
    開封第一講書人閱讀 165,830評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵宵蕉,是天一觀的道長。 經(jīng)常有香客問我节榜,道長羡玛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,957評(píng)論 1 295
  • 正文 為了忘掉前任宗苍,我火速辦了婚禮稼稿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘讳窟。我一直安慰自己让歼,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評(píng)論 6 393
  • 文/花漫 我一把揭開白布丽啡。 她就那樣靜靜地躺著谋右,像睡著了一般。 火紅的嫁衣襯著肌膚如雪补箍。 梳的紋絲不亂的頭發(fā)上改执,一...
    開封第一講書人閱讀 51,754評(píng)論 1 307
  • 那天,我揣著相機(jī)與錄音坑雅,去河邊找鬼辈挂。 笑死,一個(gè)胖子當(dāng)著我的面吹牛裹粤,可吹牛的內(nèi)容都是我干的终蒂。 我是一名探鬼主播,決...
    沈念sama閱讀 40,464評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼遥诉,長吁一口氣:“原來是場噩夢啊……” “哼拇泣!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起矮锈,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬榮一對情侶失蹤霉翔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后愕难,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,847評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評(píng)論 3 338
  • 正文 我和宋清朗相戀三年猫缭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了葱弟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,137評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡猜丹,死狀恐怖芝加,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情射窒,我是刑警寧澤藏杖,帶...
    沈念sama閱讀 35,819評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站脉顿,受9級(jí)特大地震影響蝌麸,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜艾疟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評(píng)論 3 331
  • 文/蒙蒙 一来吩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蔽莱,春花似錦弟疆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至仪糖,卻和暖如春柑司,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背乓诽。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評(píng)論 1 272
  • 我被黑心中介騙來泰國打工帜羊, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鸠天。 一個(gè)月前我還...
    沈念sama閱讀 48,409評(píng)論 3 373
  • 正文 我出身青樓讼育,卻偏偏與公主長得像,于是被迫代替她去往敵國和親稠集。 傳聞我的和親對象是個(gè)殘疾皇子奶段,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容