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

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

1, .husky文件


image.png

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

  1. eslint文件


    image.png

    eslint 它的目標(biāo)是提供一個插件化的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)先級低于 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ī)則作為一個錯誤(代碼不能執(zhí)行,界面報錯)
     */
    rules: {
        // eslint(https://eslint.bootcss.com/docs/rules/)
        'no-var': 'error', // 要求使用 let 或 const 而不是 var
        'no-multiple-empty-lines': ['warn', { max: 1 }], // 不允許多個空行
        '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 文件是一個忽略文件,主要是為了忽略對于哪些文件不需要進(jìn)行代碼校驗(yàn)。比如node_modules文件、打包后的dist文件等;

# Eslint 會忽略的文件

.DS_Store
node_modules
dist
dist-ssr
*.local
.npmrc

3.prettier.config.js、prettierignore文件


image.png

有了eslint,為什么還要有prettier? eslint針對的是javascript,他是一個檢測工具,包含js語法以及少部分格式問題,在eslint看來,語法對了就能保證代碼正常運(yùn)行,格式問題屬于其次;
而prettier屬于格式化工具,它看不慣格式不統(tǒng)一,所以它就把eslint沒干好的事接著干,另外,prettier支持
包含js在內(nèi)的多種語言。
總結(jié)起來,eslint和prettier這倆兄弟一個保證js代碼質(zhì)量,一個保證代碼美觀。
prettier.config.js內(nèi)主要配置如下:

/** 配置項(xiàng)文檔:https://prettier.io/docs/en/configuration.html */
module.exports = {
  /** 每一行的寬度 */
  printWidth: 120,
  /** Tab 鍵的空格數(shù) */
  tabWidth: 2,
  /** 在對象中的括號之間是否用空格來間隔 */
  bracketSpacing: true,
  /** 箭頭函數(shù)的參數(shù)無論有幾個,都要括號包裹 */
  arrowParens: "always",
  /** 換行符的使用 */
  endOfLine: "auto",
  /** 是否采用單引號 */
  singleQuote: false,
  /** 對象或者數(shù)組的最后一個元素后面不要加逗號 */
  trailingComma: "none",
  /** 是否加分號 */
  semi: false,
  /** 是否使用 Tab 格式化 */
  useTabs: false
}

prettierignore和eslintignore 類似,忽略以下不需要格式化的文件

# Prettier 會忽略的文件

.DS_Store
node_modules
dist
dist-ssr
*.local
.npmrc

4.環(huán)境變量的配置


image.png

項(xiàng)目開發(fā)過程中,至少會經(jīng)歷開發(fā)環(huán)境、測試環(huán)境和生產(chǎn)環(huán)境(即正式環(huán)境)三個階段。不同階段請求的狀態(tài)(如接口地址等)不盡相同,若手動切換接口地址是相當(dāng)繁瑣且易出錯的。于是環(huán)境變量配置的需求就應(yīng)運(yùn)而生,我們只需做簡單的配置,把環(huán)境狀態(tài)切換的工作交給代碼。
開發(fā)環(huán)境 (development)
顧名思義,開發(fā)使用的環(huán)境,每位開發(fā)人員在自己的dev分支上干活,開發(fā)到一定程度,同事會合并代碼,進(jìn)行聯(lián)調(diào)。
測試環(huán)境 (stagting)
測試同事干活的環(huán)境啦,一般會由測試同事自己來部署,然后在此環(huán)境進(jìn)行測試
生產(chǎn)環(huán)境(production)
生產(chǎn)環(huán)境是指正式提供對外服務(wù)的,一般會關(guān)掉錯誤報告,打開錯誤日志。(正式提供給客戶使用的環(huán)境。)
注意:一般情況下,一個環(huán)境對應(yīng)一臺服務(wù),也有的公司開發(fā)與測試環(huán)境是一臺服務(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)動態(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)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容