Vue3+Vite+Ts+Antd2.x項目搭建

NPM

npm init @vitejs/app

Yarn

yarn create @vitejs/app
項目構建(Ts版)
  • npm 6.x
npm init @vitejs/app vue-admin-pro --template vue-ts
  • npm 7+, 需要額外的雙橫線:
npm init @vitejs/app vue-admin-pro -- --template vue-ts
  • yarn
yarn create @vitejs/app vue-admin-pro --template vue-ts
支持的模板預設包括:
  • vanilla
  • vue
  • vue-ts
  • react
  • react-ts
  • preact
  • preact-ts
  • lit-element
  • lit-element-ts
項目結構
├── node_modules                                       安裝的依賴包
├── dist                                               生成打包后文件
├── public                                             中的表態資源會被復制到輸出目錄(dist)中
│   └── favicon.ico
├── src
│   ├── assets                                         放置一些靜態資源,例如圖片,圖標,字體
│       └── logo.png
│   ├── components                                     公共組件
│       └── HelloWorld.vue
│   ├── App.vue                                        路由組件的頂層路由
│   ├── main.ts                                        Vue 入口文件
│   └── shims-vue.d.ts
├── .gitignore 
├── index.html
├── package-lock.json                                  npm包配置文件、依賴包小版本信息
├── package.json                                       npm包配置文件、依賴包信息
├── README.md                                          項目說明
├── tsconfig.json                                      typescript 配置
└── vite.config.ts      

運行

npm run dev

\color{LightSeaGreen}{欲要利其事,必先利其器}

安裝依賴

NPM

npm install vue-i18n@next 
npm install vue-router@4
npm install vuex@next --save
npm install ant-design-vue@next --save
npm install axios --save
npm install nprogress --save
npm install less less-loader --save-dev

項目結構(Vue-I18n、Vue-Router、Vuex、Ant Design)

├── node_modules                                       安裝的依賴包
├── dist                                               生成打包后文件
├── public                                             中的表態資源會被復制到輸出目錄(dist)中
│   └── favicon.ico
├── src
│   ├── assets                                         放置一些靜態資源,例如圖片,圖標,字體
│       └── logo.png
│   ├── components                                     公共組件
│       └── HelloWorld.vue
│   ├── locales                                        國際化
│       └── index.ts
│   ├── plugins                                        存放第三方插件
│       └── index.ts
│   ├── router                                         路由配置
│       └── index.ts
│   ├── store                                          Vuex狀態管理
│       └── index.ts                                   自動裝載模塊
│   ├── views                                          頁面級組件
│       ├── About.vue
│       └── Home.vue     
│   ├── App.vue                                        路由組件的頂層路由
│   ├── main.ts                                        Vue 入口文件
│   └── shims-vue.d.ts
├── .gitignore                                         Git忽略規則
├── index.html
├── package-lock.json                                  npm包配置文件、依賴包小版本信息
├── package.json                                       npm包配置文件、依賴包信息
├── README.md                                          項目說明
├── tsconfig.json                                      typescript 配置
└── vite.config.ts  
配置路由
// router/index.ts
import { createRouter, createWebHistory } from "vue-router";
import Home from "@/views/Home.vue"

const routes = [
  {
    path: "/",
    name: "Home",
    component: Home,
  },
  {
    path: "/about",
    name: "About",
    // route level code-splitting
    // this generates a separate chunk (about.[hash].js) for this route
    // which is lazy-loaded when the route is visited.
    component: () =>
      import(/* webpackChunkName: "about" */ "@/views/About.vue")
  }
]

const router = createRouter({
  history: createWebHistory(),
  routes,
});

export default router
整合路由
// main.ts
import { createApp } from 'vue'
import App from './App.vue'
import router from "./router"
const app = createApp(App);
app.use(router).mount("#app")
配置 Vite
// vite.config.ts
import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
const path = require("path");

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [vue()],
  resolve: {
    alias: {
      "@": path.resolve(__dirname, "./src"),
    },
  },
});
Ant Design of Vue
  • 按需加載
// plugins/antd.ts
import type { App } from "vue";
import { ConfigProvider, Button } from "ant-design-vue";
import "ant-design-vue/dist/antd.css";
export function setupAntd(app: App<Element>) {
  app.use(ConfigProvider).use(Button);
}
// plugins/index.ts
export { setupAntd } from "../plugins/antd"
  • .gitignore 配置
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
package-lock.json

.DS_Store
node_modules
/dist

# local env files
.env.local
.env.*.local

# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw*

前端自動化
Elint規范 (代碼檢查工具)
npm install eslint @typescript-eslint/parser @typescript-eslint/eslint-plugin --save-dev
描述:
  • eslint: EsLint的核心代碼
  • @typescript-eslint/parser:ESLint的解析器,用于解析typescript,從而檢查和規范Typescript代碼
  • @typescript-eslint/eslint-plugin:這是一個ESLint插件,包含了各類定義好的檢測Typescript代碼的規范
  • 添加配置文件
npx eslint --init

√ How would you like to use ESLint? · problems
√ What type of modules does your project use? · esm
√ Which framework does your project use? · vue
√ Does your project use TypeScript? · No / Yes
√ Where does your code run? · node
√ What format do you want your config file to be in? · JavaScript
資料
  • .eslintrc.js 配置
module.exports = {
    env: {
        es2021: true,
        node: true,
    },
    extends: [
        'eslint:recommended',
        'plugin:vue/essential',
        'plugin:@typescript-eslint/recommended'
    ],
    parserOptions: {
        ecmaVersion: 12,
        parser: '@typescript-eslint/parser',
        sourceType: 'module',
    },
    plugins: ['vue', '@typescript-eslint'],
    rules: {},
}
  • .eslintignore 配置
*.sh
node_modules
*.md
*.woff
*.ttf
.vscode
.idea
dist
/public
/docs
.husky
.local
/bin
Dockerfile

Prettier美化(前端代碼格式化工具)
npm install prettier eslint-config-prettier eslint-plugin-prettier --save-dev
描述:
  • prettier:prettier插件的核心代碼
  • eslint-config-prettier:解決ESLint中的樣式規范和prettier中樣式規范的沖突,以prettier的樣式規范為準,使ESLint中的樣式規范自動失效
  • eslint-plugin-prettier:將prettier作為ESLint規范來使用
  • 新建配置文件
// prettier.config.js
module.exports = {
    printWidth: 80,             // 超過最大值換行
    tabWidth: 2,                // 縮進字節數
    useTabs: false,             // 縮進不使用tab,使用空格
    semi: false,                // 句尾添加分號
    singleQuote: true,          // 使用單引號代替雙引號
    trailingComma: 'none',      // 在對象或數組最后一個元素后面是否加逗號
    bracketSpacing: true,       // 在對象,數組括號與文字之間加空格 "{ foo: bar }"
    jsxBracketSameLine: true,   // 在jsx中把'>' 是否單獨放一行
    arrowParens: 'avoid',       // (x) => {} 箭頭函數參數只有一個時是否要有小括號。avoid:省略括號
    insertPragma: false,        // Prettier可以在文件的頂部插入一個 @format的特殊注釋,以表明改文件已經被Prettier格式化過了
    endOfLine: 'auto',          // 結尾是 \n \r \n\r auto
}

  • 將Prettier添加到EsLint中
// .eslintrc.js
module.exports = {
  env: {
    browser: true,
    es2021: true,
    node: true
  },
  extends: [
    'eslint:recommended',
    'plugin:vue/essential',
    'plugin:@typescript-eslint/recommended',
    'plugin:prettier/recommended',
    'prettier/@typescript-eslint'
  ],
  parserOptions: {
    ecmaVersion: 12,
    parser: '@typescript-eslint/parser',
    sourceType: 'module'
  },
  plugins: ['vue', '@typescript-eslint'],
  rules: {}
}
描述:
  • prettier/@typescript-eslint:使得@typescript-eslint中的樣式規范失效,遵循prettier中的樣式規范
  • plugin:prettier/recommended:使用prettier中的樣式規范,且如果使得ESLint會檢測prettier的格式問題,同樣將格式問題以error的形式拋出
新增命令
// package.json
"scripts": {
    "dev": "vite",
    "build": "vuedx-typecheck . && vite build",
    "serve": "vite preview",
    "lint:eslint": "eslint \"{src}/**/*.{vue,ts,tsx}\" --fix",
    "lint:prettier": "prettier --write --loglevel warn \"src/**/*.{js,json,ts,tsx,css,less,scss,vue,html,md}\""
 }
執行
npm run lint:prettier
npm run lint:eslint
前端代碼風格自動化
npm install husky lint-staged @commitlint/config-conventional @commitlint/cli --save-dev
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,606評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,582評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,540評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,028評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,801評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,223評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,294評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,442評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,976評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,800評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,996評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,543評論 5 360
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,233評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,662評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,926評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,702評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,991評論 2 374

推薦閱讀更多精彩內容