這是一篇完整的 2022 年連結優化指南。
因此,如果你想要取得權威網站的反向連結。
你將會在這篇新指南中,享受本文可操作的技巧。
讓我們往深入其中吧。
Vben Admin
介紹
Vue-Vben-Admin
是一個基於
Vue3.0
、
Vite
、
Ant-Design-Vue
、
TypeScript
的後台解決方案,目標是為開發中大型項目提供開箱即用的解決方案。包括二次封裝組件、utils、hooks、動態菜單、權限校驗、按鈕級別權限控制等功能。項目會使用前端較新的技術棧,可以作為項目的啟動模版,以幫助你快速搭建企業級中後台產品原型。也可以作為一個示例,用於學習
vue3
、
vite
、
ts
等主流技術。該項目會持續跟進最新技術,並將其應用在項目中。
文檔
- 中文文檔 地址為 vben-admin-doc ,採用 Vitepress 開發。
本地運行文檔
如需本地運行文檔,請拉取代碼到本地。
|
|
需要掌握的基礎知識
本項目需要一定前端基礎知識,請確保掌握Vue 的基礎知識,以便能處理一些常見的問題。建議在開發前先學一下以下內容,提前了解和學習這些知識,會對項目理解非常有幫助:
模版
vue-vben-admin
完整版本。該版本主要是提供一些Demo示例及插件的使用集成方式,主要用於參考。如果對項目不是很熟悉,不建議在此基礎上進行開發,請使用下方提供的精簡版本。
vue-vben-admin
精簡版本。刪除了相關示例、無用文件及功能、依賴。可以根據自身需求安裝對應的依賴。因為使用的是 vite,依賴刪除不會導致相關組件或者 hook 發出警告。只在需要的時候安裝對應的庫即可。
vite 插件推薦
vite-plugin-mock
- 用於本地及開發環境數據 mock
vite-plugin-html
- 用於 html 模版轉換,可以在html文件內進行書寫模版語法
vite-plugin-style-import
- 用於組件庫樣式按需引入
vite-plugin-imagemin
- 用於打包壓縮圖片資源
vite-plugin-theme
- 用於在線切換主題色/黑暗主題適配等主題相關配置
vite-plugin-compression
- 用於打包輸出.gz|.br文件
vite-plugin-svg-icons
- 快速生成 svg sprite
瀏覽器支持
本地開發推薦使用Chrome 最新版瀏覽器,不支持Chrome 80以下版本。
生產環境支持現代瀏覽器,不支持IE。
創建VbenLearn項目
使用Vite創建項目
|
|
yarn報錯
安裝 vscode 插件
安裝插件
- Iconify IntelliSense :Iconify 圖標插件
- WndiCSS lntelliSense :windicss 提示插件
- i18n Ally : i18n 插件
- Vetur :vue 開發必備 (也可以選擇 Volar)
- ESLint :腳本代碼檢查
- Prettier - Code formatter:代碼格式化
- Stylelint :css 格式化
- DotENV : .env 文件 高亮
獲取 Vben Admin
從 GitHub 獲取代碼
|
|
從 Gitee 獲取代碼
|
|
注意
Gitee 的代碼可能不是最新的
imagemin 依賴安裝失敗解決方法
由於 imagemin 在國內安裝困難,提供以下幾個解決方案:
- 使用 yarn 在 package.json 內配置(推薦,項目內已集成,前提是必須使用 yarn)
package.json
|
|
- 使用 npm,在電腦 host 文件加上如下配置即可
etc/hosts
|
|
npm script
package.json
|
|
目錄說明
|
Vite配置多環境
說明:
就好像之前在Vue-Cli中的env一樣。
項目的環境變量配置位於項目根目錄下的 .env 、 .env.development 、 .env.production
|
|
創建默認配置文件
根目錄下創建:
.env
文件
|
|
創建生產配置文件
根目錄下創建:
.env.production
文件
|
|
創建開發配置文件
根目錄下創建:
.env.development
文件
|
|
測試配置
src\App.vue
|
|
配置TS
說明
我們使用
Vite
創建的項目時使用的是
vue-ts
模板,所以在創建項目的時候
package.json
就自帶了
typescript
。該依賴會編譯我們的
ts
文件。那麼是依賴我們就可以配置它。配置內容還是照搬
Vben
的,加上註釋和規則來源。
創建配置文件
根目錄下創建:tsconfig.json文件
|
這裡配置完ESLint之後會報錯,說找不到vite/client。不用管它,當你執行完後面的ESLint-TS的時候就不會報錯了。
安裝 ESLint
說明
ESLint
簡單的來說就是去判斷你的
JS
代碼寫的格式對不對的一個依賴。沒有它你的代碼也能運行,有了它你的代碼可以寫的更漂亮。
ESLint
還支持插件,第三方框架會基於
ESLint
寫出自己的代碼檢查插件。比如
Vue3
對應
eslint-plugin-vue
。
安裝 ESLint
|
|
配置ESLint:根目錄下創建:
.eslintrc.js
文件。
這裡可以使用eslint的init。但是我不清楚Vben的初始化操作是怎麼選的,所以直接拷貝Vben的配置。
|
|
配置ESLint忽略文件:根目錄下創建:
.eslintignore
文件
|
安裝 eslint-plugin-vue
說明
ESLint
是檢查JS代碼的依賴,那麼它怎麼去檢查
Vue
語法的文件呢?要完成這件事,我們就需要安裝
vue
官方開發的
ESLint
插件
eslint-plugin-vue
。這樣
ESLint
就知道該怎麼檢查
vue
的文件了。
- eslint-plugin-vue的官方文檔
- eslint-plugin-vue的npm首頁
- vue eslint 升級_ESLint 的 parser 是個什麼東西
- vue-eslint-parser的Git地址
怎麼理解
eslint-plugin-vue
和
vue-eslint-parser
的關係呢?
ESLint
會對我們的代碼進行校驗,而
parser
的作用是將我們寫的代碼轉換為
ESTree
,
ESLint
會對
ESTree
進行校驗。
vue-eslint-parser
文檔上說是
vue
的模板解析器。
vue-eslint-parser
的文檔中強調
<template>
標籤中的內容進行檢查。
那麼我的理解是
vue-eslint-parser
將
vue
文件轉換成
ESTree
。然後使用
eslint-plugin-vue
來檢查這個
ESTree
。查出的結果交給
ESLint
。
vue-eslint-parser
的官方說明:
This parser allows us to lint the
<template>
of .vue files. We can make mistakes easily on<template>
if we use complex directives and expressions in the template. This parser and the rules of eslint-plugin-vue would catch some of the mistakes.
這個解析器允許我們對.vue
文件的<template>
進行檢查。如果我們在模板中使用了複雜的指令和表達式,我們很容易在<template>
上出錯。這個解析器和eslint-plugin-vue的規則可以發現一些錯誤。
總之
eslint-plugin-vue
和vue-eslint-parser
需要一起使用,而且官網也有標示怎麼操作。
安裝兩個 npm 插件
|
|
將插件配置進ESLint
配置ESLint:根目錄下修改:
.eslintrc.js
文件
.eslintrc.js
|
|
安裝 @typescript-eslint
說明
這裡同理需要安裝
@typescript-eslint/eslint-plugin
和
@typescript-eslint/parser
。
安裝TS的Lint
|
|
將插件配置進ESLint
配置ESLint:根目錄下修改:
.eslintrc.js
文件
.eslintrc.js
|
|
安裝 eslint-plugin-prettier
說明
prettier
用來格式化代碼的。一般IDE都有
prettier
的插件,在保存的時候格式化代碼。那麼我們
eslint-plugin-prettier
就是通過JS來判斷代碼格式是否正確。
一般這很必要,因為不同的程序員有不同的IDE,不同的IDE有不同的
prettier
插件。但對於項目來說只有一個
eslint-plugin-prettier
。
而
eslint-plugin-prettier
插件依賴於
prettier
依賴。那麼
eslint-config-prettier
插件又是幹嘛的?
prettier
和
ESLint
之間有些規則不一樣,因此是用於解決衝突得。
eslint-config-prettier
將
prettier
一些規則默認關閉了。
- 使用ESLint+Prettier來統一前端代碼風格
- prettier首頁
- prettier的npm首頁
- eslint-plugin-prettier的npm首頁
- eslint-config-prettier的npm首頁
安裝
|
|
配置prettier
根目錄下創建:
prettier.config.js
文件
prettier.config.js
|
|
配置prettier忽略文件
根目錄下創建:
.prettierignore
文件
.prettierignore
|
|
配置進ESLint
配置ESLint:修改根目錄下:
.eslintrc.js
文件
.eslintrc.js
|
|
自定義ESLint檢查規則
說明
ESLint
是用來檢查代碼的。又安裝了那麼多的插件。但是官方默認的方案有時不一樣符合我們的要求。我們需要自定義自己的規則。
修改規則主要是修改根目錄下
.eslintrc.js
文件的
rules
字段。
修改規則
- @typescript-eslint/ban-ts-ignore
- @typescript-eslint/explicit-function-return-type
- @typescript-eslint/no-explicit-any
- @typescript-eslint/no-var-requires
- @typescript-eslint/no-empty-function
- vue/custom-event-name-casing
- no-use-before-define
- @typescript-eslint/no-use-before-define
- @typescript-eslint/ban-ts-comment
- @typescript-eslint/ban-types
- @typescript-eslint/no-non-null-assertion
- @typescript-eslint/explicit-module-boundary-types
- @typescript-eslint/no-unused-vars
- no-unused-vars
- space-before-function-paren
- vue/attributes-order
- vue/one-component-per-file
- vue/html-closing-bracket-newline
- vue/max-attributes-per-line
- vue/multiline-html-element-content-newline
- singleline-html-element-content-newline
- vue/attribute-hyphenation
- vue/html-self-closing
- vue/require-default-prop
配置ESLint:根目錄下:
.eslintrc.js
文件
.eslintrc.js
|
|
vben項目配置git忽略文件
說明
這個應該是項目一上來就要處理的,但是我手撕Vben的時候,按照配置文件的順序下來,到現在才處理了。
創建Git忽略文件
根目錄下創建:
.gitignore
文件
.gitignore
|
|
安裝style-lint
說明
這次需要安裝四個插件
stylelint
、
stylelint-config-standard
、
stylelint-config-prettier
、
stylelint-order
。
-
stylelint
是對我們編寫的樣式進行檢查的插件。 -
stylelint-config-standard
是stylelint
擴展的檢查標準庫。 -
stylelint-config-prettier
是用來解決衝突的(估計又和ESLint衝突了,參考之前的prettier
)。 -
stylelint-order
是檢查我們樣式編寫順序的。
參考連結
- stylelint官網
- stylelint的npm首頁
- stylelint-config-standard的npm首頁 :擴展,標準庫
- stylelint-config-prettier的npm首頁 :擴展,解決衝突的
- stylelint-order的npm首頁 :插件,樣式排序
- stylelinit的配置說明
- stylelint的配置規則
安裝
|
|
配置stylelint
根目錄下創建:
stylelint.config.js
文件
stylelint.config.js
|
|
配置自定義樣式規則
根目錄下修改:
stylelint.config.js
文件
stylelint.config.js
|
|
配置stylelint忽略文件
根目錄下創建:
.stylelintignore
文件
.stylelintignore
|
|
配置Yarn自動清除功能
說明
實現每一次
install
之後、
add
之後、
yarn autoclean --force
之後。從程序包依賴項中清除並刪除不必要的文件。
參考鏈接: yarn autoclean-官方說明
初始化
|
|
執行完命令之後,Yarn就會自動在根目錄下創建一個
.yarnclean
文件,這樣就可以了。
安裝PostCSS
說明
我們需要安裝兩個庫
postcss
、
autoprefixer
。要現實的效果就是我們編寫一般的樣式,渲染頁面的
dom
節點有面向各種瀏覽器廠商的樣式。
網上說
postcss
類似一個平台,上面有很多插件,
autoprefixer
就其中一個。
我以我的看法來解釋一下:
postcss
就像一個管子,
autoprefixer
是裡面的過濾器。你寫的
css
從管子中流過,經過他們的處理就出現了不同的結果。
參考連結:
安裝
|
|
配置postcss
根目錄下:
postcss.config.js
postcss.config.js
|
|
解析VbenAdmin中的
script
說明
一下腳本直接添加在根目錄下的
package.json
的
scripts
對象中即可。也可以直接照搬
VbenAdmin
的。
以
bootstrap
為例。如下:
|
|
bootstrap
代碼:
package.json
|
|
作用:使用yarn安裝所有依賴。
serve
代碼:
package.json
|
|
作用:以開發環境運行項目,並設置
node
的運行內存為
4G
。
-
--max-old-space-size
:單位為MB
-
--max-new-space-size
:單位為KB
- node命令行文檔
- npx的Git首頁,有命令行說明
- –max-old-space-size参数说明
dev
代碼:
package.json
|
|
作用:同
serve
。
build
代碼:
package.json
|
|
作用:這裡先不管。先使用原來創建項目的
"build": "vite build"
。後面完成了
vite
配置之後再處理這個腳本。
build:no-cache
代碼:
package.json
|
|
作用:清空緩存後構建。
report
作用:生成打包分析,這裡先不管,等後面配置vite再說。
preview
代碼:
package.json
|
|
作用:先打包在進行預覽,使用
vite
訪問
dist
目錄。
preview:dist
代碼:
package.json
|
|
作用:直接預覽本地
dist
文件目錄。
log
作用:用來生產Git提交記錄的。
clean:cache
作用:刪除緩存,刪除
node_modules/.cache/
和
node_modules/.vite
下的文件,由於刪除命令依賴還沒安裝,所以後面再講。
clean:lib
作用:清除依賴,刪除
node_modules
文件夾,由於刪除命令依賴還沒安裝,所以後面再講。
lint:eslint
代碼:
package.json
|
|
作用:執行
eslint
校驗,該命令會對項目的
src
、
mock
目錄下的
vue
、
ts
、
tsx
文件進行
eslint
校驗,並修復部分問題。
參考連結:
eslint命令行說明
lint:prettier
代碼:
package.json
|
|
作用:執行
prettier
格式化代碼。該命令會對項目所有代碼 進行
prettier
格式化。謹慎執行。
如果你的
vsCode
安裝了prettier
插件。那麼prettier
插件就會讀取根目錄下的prettier.config.js
文件。當你保存的時候就會進行格式化文件。
但是過是別人提交上來的文件,你還去點開它的文件一個一個保存麼?所以執行這個命令,可以將src
目錄下,所有的文件格式化。
參考連結: prettier命令行說明
lint:stylelint
代碼:
package.json
|
|
作用:校驗所有文件的樣式格式,並嘗試修復。
參考連結: stylelint命令行说明
lint:ls-lint
代碼:
package.json
|
|
作用:校驗所有文件命名是否正確。
lint:lint-staged
代碼:
package.json
|
|
作用:對Git暫存的文件進行lint檢查。
lint:pretty
代碼:
package.json
|
|
作用:對Git暫存文件進行pretty的操作。
test:gzip
作用:這個後面再說,http-server的npm首頁。
test:br
作用:這個後面再說,http-server的npm首頁。
reinstall
作用:重新安裝依賴,該命令會先刪除 node_modules、yarn.lock、package.lock.json後在進行依賴重新安裝,速度會明顯變慢。
由於刪除命令依賴還沒安裝,所以後面再講。
install:husky
代碼:
package.json
|
|
作用:這個是用來初始化husky的。 啟用Git掛鉤 。
說明:如果不是CI服務器,就啟動Git鉤子。
gen:icon
作用:生成圖標的,後面再說。
postinstall
代碼:
package.json
|
|
作用:執行
install:husky
命令。這個命令會自動啟動Git鉤子,該操作參考:
手動初始化husky
和
Yarn2下怎麼自動啟動Git鉤子函數
。
彙總
package.json
除腳本、運行依賴、開發依賴外的字段參考
官方文檔
。
yarn -v
的腳本是後面要說的腳本。
package.json
|
安裝rimraf
說明
由於手動刪除文件夾太慢了,需要實現腳本刪除文件。
參考連結
rimraf
的
npm
首頁說明:
The UNIX command
rm -rf
for node.
Install with
npm
install
rimraf
, or just drop rimraf.js somewhere.
翻譯:
node
版的Unix系統命令
rm -rf
。
用
npm
安裝
rimraf
,或者直接把
rimraf.js
放在某個地方。
雖然這裡可以通過
import
使用函數刪除文件,但是我們主要是使用它的命令行蛤。
詳情查看: rimraf的npm首頁-Cil說明 。
安裝
|
|
重寫腳本
就是根目錄下
package.json
的
scripts
字段。
clean:cache
package.json
|
|
目的:刪除緩存,刪除
node_modules/.cache/
和
node_modules/.vite
下的文件。
clean:lib
package.json
|
|
目的:清除依賴,刪除
node_modules
文件夾。
reinstall
package.json
|
|
目的:重新安裝依賴,該命令會先刪除
node_modules
、
yarn.lock
、
package.lock.json
後在進行依賴重新安裝,速度會明顯變慢。
使用husky規范代碼提交
說明
使用Git提交代碼的時候,需要對暫存的代碼進行如下操作:
-
進行
lint
操作。 -
對
commit
的消息進行格式化檢查。 -
進行
prettier
操作。
需要安裝的依賴有:
husky
、
lint-staged
、
@commitlint/cli
、
@commitlint/config-conventional
、
pretty-quick
、
is-ci
。
-
husky
:可以在Git的鉤子函數中執行腳本。 -
lint-staged
:針對暫存文件進行lint操作。 -
@commitlint/cli
:對commit的消息進行格式檢查。 -
@commitlint/config-conventional
:commit的消息檢查格式傳統配置,對應還有很多其他配置,比如angular的提交規範 @commitlint/config-angular 。 -
pretty-quick
:針對暫存文件進行prettier操作。 -
is-ci
:husky
好像不能在ci環境下執行,這個依賴是用來判斷是不是ci
環境的。
參考連結
- husky的npm首頁
- husky官方文檔
- lint-staged的npm首頁
- @commitlint/cli的npm首頁
- @commitlint/cil官網
- @commitlint/config-conventional的首頁
- pretty-quick的npm首頁
- Prettier官網對Git鉤子函數的支持說明
- is-ci的npm首頁
- 前端代碼規範從0到1
- 前端工作流
安裝
|
|
配置commitlint
在根目錄下創建
commitlint.config.js
文件。
commitlint.config.js
|
|
配置husky
啟動Git鉤子
|
|
這個時候就在根目錄下創建了
.husky
目錄了。 vben將裡面的一個文件夾刪除了。
修復YarnOnWindowsBug
在帶有Git Bash(stdin is not a tty)的Windows上使用Yarn時,Git掛鉤可能會失敗。如果您有Windows用戶,則強烈建議添加以下解決方法。
-
創建
.husky/common.sh
:
|
|
- 在使用Yarn運行命令的地方將其來源:
|
|
這裡是yarn命令的地方要這樣用,其他地方要不要無所謂。第二步可以先不管。
創建lint-staged的配置文件
- lint:lint-staged
package.json
|
|
作用:對Git暫存的文件進行lint檢查。
- lint:pretty
package.json
|
|
作用:對Git暫存文件進行pretty的操作。
- install:husky
package.json
|
|
作用:如果不是CI服務器,就啟動Git鉤子。
- postinstall
package.json
|
|
作用:執行install:husky命令。這個命令會自動啟動Git鉤子, 參考文檔 。
給husky添加任務
|
|
手動修改
.husky/commit-msg
文件:
這裡面的
$1
一定要用
雙引號
,不然後面執行會報錯。
.husky/commit-msg
|
|
手動修改
.husky/pre-commit
文件:
參考連結:
最後手動執行之前創建的腳本命令。
|
|
測試
失敗測試
最好先重啟你的ide
|
|
格式
出錯了,我們規範的提交消息試試:
@commitlint/config-conventional 的規範+我們自定義的規則。
type: some message
類型英文 | 類型中文 |
---|---|
build | 建立 |
chore | 雜事 |
ci | ci |
docs | 文檔 |
feat | 壯舉 |
fix | 修復 |
perf | 敷衍 |
refactor | 重構 |
revert | 恢復 |
style | 樣式 |
test | 測試 |
成功測試
提交成功,當然你不用擔心這樣手敲太麻煩了,後面還有插件可以自動幫你敲這些格式。
|
|
使用conventional-changelog-cli生成變更記錄
說明
在
VbenAdmin
項目的腳本命令和根目錄中還有
CHANGELOG.md
這麼個文件,這是記錄我們項目變更記錄的MD。明顯不是手寫出來的,那麼怎麼生成?
參考連結:
安裝
|
|
配置腳本
package.json
文件中的
scripts
字段。
package.json
|
|
|
可以看見生成了
CHANGELOG.md
文件
|
命令列參數
|
|
配置Vite
說明
本章只是準備,大家可以直接把VbenAdmin的
vite.config.ts
原代碼複製到我們的項目中。然後把報錯的地方註釋掉。接下來的章節會把這個文件一段一段的解析出來。章節做太長了大家應該也不喜歡看,至少我不喜歡看長文章。
代碼
|
|
Node的path.resolve方法
說明
psth.resolve([...paths])
方法是
NodeApi
中
path
模塊的方法。
參考連結
- Node中文API
- path.resolve([…paths])方法
- path.resolve([…path])方法在線運行
- psth.resolve([…pth])較通俗的理解
VbenAdmin原代碼
|
|
代碼在項目中報錯
此時引入項目會報錯:找不到
path
。
因為我們沒有安裝
node
的聲明文件,ts裡面沒有。
|
|
這個開發依賴在原VbenAdmin項目中沒有,是因為其他依賴中有這個依賴。
但是我們現在還沒有安裝包含@types/node的依賴。
剩下的依賴裡面有很多這樣的依賴,我們也不去猜是哪個依賴了。
反正是一個開發依賴,我們直接自己手動安裝了。
resolve方法
該方法百度上有兩種說法:
- 從後向前,生成絕對路徑。
-
若字符以
/
開頭,不會拼接到前面的路徑(因為拼接到此已經是一個絕對路徑)。 -
若以
../
開頭,拼接前面的路徑,且不含最後一節路徑。 -
若以
./
開頭 或者沒有符號 則拼接前面路徑。 - 需要注意的是:如果在處理完所有給定的 path 片段之後還未生成絕對路徑,則再加上當前工作目錄。
- 每一個參數都理解為一個cd命令。最終cd到哪個路徑。返回該絕對路徑。
__dirname
NodeApi
的
__dirname
:當前模塊目錄名。
在線運行
|
|
Vite的情景配置
說明
本章收集了一些
Vite
如何根據不同環境進行不同配置的資料。
參考連結
代碼
總之不管使用什麼方式配置
Vite
,最後返回的就只是一個
對象
。對像中包含
Vite
配置的細節。
|
|
參數說明
vite
目前只有
vite
、
vite build
、
vite preview
這三種命令。以下是這三種命令的
command
和
mode
的值。
-
vite
-
command:
serve
-
mode:
development
-
command:
-
vite build
-
command:
build
-
mode:
production
-
command:
-
vite preview
-
command:
serve
-
mode:
development
-
command:
Node的process
說明
返回 Node.js 進程的當前工作目錄。
參考連結
代碼
|
|
Vite的loadEnv方法
說明
-
檢查
process.cwd()
路徑下.env.development.local
、.env.development
、.env.local
、.env
這四個環境文件。 -
輸出
NODE_ENV
和VITE_
開頭的鍵值對。 -
VITE_
開頭的鍵值對後面的不會覆蓋前面的。 -
NODE_ENV
的值後面的會覆蓋前面的。
參考連結
- NodeApi中文文檔-process
- NodeApi中文文檔-process-env說明
- NodeApi中文文檔-path
- NodeApi中文文檔-path.join()方法
- NodeApi中文文檔-path.dirname()方法
- NodeApi中文文檔-fs
- NodeApi中文文檔-fs.existsSync()方法
- NodeApi中文文檔-fs.statSync()方法
- NodeApi中文文檔-fs.readFileSync()方法
- Node-process-env在線運行
- Linux手冊頁-environ(7)
- Vite項目下.env系列文件命名的意義-中文文檔
- Vite項目下.env系列文件命名的意義-英文文檔
原始碼
前置代碼
|
|
|
Vben中的wrapperEnv方法
說明
|
|
翻譯如下:
loadEnv
讀取的布爾類型是一個字符串。該函數可以轉換為布爾類型。
創建wrapperEnv方法
從這開始涉及到根目錄下的
build
文件夾了。創建該文件夾。我們使用
build
文件夾裝所有關於項目構建類的東西。
創建定義文件
根目錄下的
build
文件夾創建
typeing.d.ts
文件。
typeing.d.ts
|
|
參考連結
- TS通用模塊聲明
- TS的高級類型Record
- 允許導入Json這段代碼,寫在哪都行。 TS都會加載到。
定義Env對像類型
根目錄下的
build
文件夾創建
utils.ts
文件。
utils.ts
|
|
導出的這個類型對應了我們配置文件中的Key。
格式化Env對象的wrapperEnv方法
在
utils.ts
文件中添加以下方法:
utils.ts
|
|
代碼說明:
-
中間的正則替換就是將
\\n
替換成\n
,複製下面這些代碼可以去瀏覽器中體驗一下。-
console.log('asda\\\n\\n\n'.replace(/\n/g, '\n'))
=>asda\ [回車\n] \n [回車\n]
-
console.log('asda\\\n\\n\n'.replace(/\\n/g, '\n'))
=>asda\ [回車\n] [回車\n] [回車\n]
-
console.log('asda\\\n\\n\n'.replace(/\\\n/g, '\n'))
=>asda [回車\n] \n [回車\n]
-
vite.config.ts文件復盤
自此
vite.config.ts
,除
return
裡面的東西外,其他的都已經解析完了。以現在可以得到這樣一個代碼:
vite.config.ts
|
|
Vite配置-base
說明
官網原文:
-
類型:
string
-
默認:
/
開發或生產環境服務的 公共基礎路徑。合法的值包括以下幾種:
-
絕對 URL 路徑名,例如
/foo/
-
完整的 URL,例如
https://foo.com/
-
空字符串或
./
(用於開發環境)
更多信息詳見 公共基礎路徑 。
就是你的項目的
BaseURL
。比如這裡我配置一個
yiu
那麼我的項目訪問:
http://localhost:3000/yiu/
當你訪問其他路徑就會報錯:
http://localhost:3000/any/
|
|
Vite配置-root
說明
官網原文:
-
類型:
string
-
默認:
process.cwd()
項目根目錄(index.html 文件所在的位置)。可以是一個絕對路徑,或者一個相對於該配置文件本身的路徑。
更多信息詳見 項目根目錄 。
用來找
index.html
路徑的配置吧,亂寫啟動項目的時候會報錯。其他的也不用解釋了。
Vite配置-resolve.alias
說明
官網原文:
-
類型:
1
Record<string, string> | Array<{ find: string | RegExp, replacement: string }>
將會被傳遞到
@rollup/plugin-alias
作為它的
entries
。也可以是一個對象,或一個
{ find, replacement }
的數組。
當使用文件系統路徑的別名時,請始終使用絕對路徑。相對路徑作別名值將按原樣使用導致不會解析到文件系統路徑中。
更高級的自定義解析方法可以通過
插件
實現。
VbenAdmin
的示例:
vite.config.ts
|
|
Vite配置-server.port
說明
官網原文:
-
類型:
number
指定服務器端口。注意:如果端口已經被使用,Vite 會自動嘗試下一個可用的端口,所以這可能不是服務器最終監聽的實際端口。
Vite配置-server.proxy
說明
官網原文:
-
類型:
1
Record<string, string | ProxyOptions>
為開發服務器配置自定義代理規則。期望接收一個
{ key: options }
對象。如果 key 值以
^
開頭,將會被解釋為
RegExp
。
使用
http-proxy
。完整選項詳見
此處
。
示例:
|
|
VbenAdmin代碼解析
我們在
build
文件夾下創建一個
vite
文件,這麼放置所有和
vite
配置有關的文件。然後完成本章兩個文件的編寫。
proxy.ts
build\vite\proxy.ts
,注意,這裡帶註解的代碼和原代碼不一樣。因為原代碼我感覺有點問題。
Vite
官方文檔說代理配置接收的是一個
Record<string, string | ProxyOptions>
對象。而這個文件的主要方法返回的是
ProxyTargetList
類型的對象。
按理來說
ProxyTargetList
應該直接等於
Record<string, string | ProxyOptions>
。
但是
VbenAmin
的代碼安裝了一個
@types/http-proxy
(雖然
Vite
本身的代理就是用
http-proxy
實現的)的開發依賴。然後從這個開發依賴裡面導入一個
ServerOptions
。讓
ProxyTargetList
等於
Record<string, ServerOptions & { rewrite: (path: string) => string }>
。
個人感覺可以直接使用
vite
提供的類型即可,不用安裝
@types/http-proxy
的聲明文件。
代碼
被代理之後,訪問的路徑是 代理至的路徑 + 訪問的路徑去掉根路徑後經過
rewrite
處理的路徑。
build/vite/proxy.ts
|
vite.config.ts
直接將上面定義的生成代理配置的方法放到
vite.config.ts
中使用。
|
|
Vite配置-server.hmr
說明
官網原文:
-
類型:
1
boolean | { protocol?: string, host?: string, port?: number, path?: string, timeout?: number, overlay?: boolean }
禁用或配置 HMR 連接(用於 HMR websocket 必須使用不同的 http 服務器地址的情況)。
設置
server.hmr.overlay
為
false
可以禁用服務器錯誤遮罩層。
這個就是配置Vite的熱更新的。文檔中說的服務器錯誤遮罩層,就是你在代碼中編寫編寫錯誤的代碼,編譯不通過的時候,瀏覽器頁面也會同時展示一個灰屏上面顯示你的代碼錯誤。
Vite配置-build.minify
說明
官網原文:
-
類型:
1
boolean | 'terser' | 'esbuild'
-
默認:
terser
設置為
false
可以禁用最小化混淆,或是用來指定使用哪種混淆器。默認為
Terser
,雖然
Terser
相對較慢,但大多數情況下構建後的文件體積更小。
ESbuild
最小化混淆更快但構建後的文件相對更大。
Vite配置-build.outDir
說明
官網原文:
-
類型:
string
-
默認:
dist
指定輸出路徑(相對於 項目根目錄 )。
創建全局常數
這個輸出路徑我們把它寫成一個全局常量。全局常量保存在:
build\constant.ts
build\constant.ts
|
然後在
vite.config.ts
中引用:
vite.config.ts
|
|
Vite配置-build.polyfillDynamicImport
說明
官網原文:
-
類型:
boolean
-
默認:
true
,除非build.target
是esnext
。
是否自動注入 動態導入polyfill 。
polyfill
會自動注入到每個
index.html
條目的代理模塊中。如果通過
build.rollupOptions.input
配置成使用非
html
的自定義條目,那麼就需要手動導入自定義條目中的
polyfill
:
|
|
注意:
polyfill
不適用於庫模式
。如果你需要支持沒有本地動態導入的瀏覽器,你可能應該避免在你的庫中使用它。
Vite
使用
ES
動態導入作為代碼分割點。生成的代碼還將使用動態導入來加載異步塊。然而,本機
ESM
動態導入支持是在
ESM
之後通過腳本標記實現的,並且這兩個特性在瀏覽器支持方面存在差異。
Vite
會自動注入一個輕量級的動態導入填充來消除這種差異。
如果你知道你的目標瀏覽器只支持本機動態導入,你可以通過
build.polyfillDynamicImport
顯式禁用此特性。
總之
VbenAdmin
中在生產環境將此項禁用了。如果打包後的項目有問題,而本地運行沒問題。那麼嘗試打開它,因為這個配置貌似和瀏覽器有關。
創建全局常數
這個輸出路徑我們把它寫成一個全局常量。全局常量保存在:
build\constant.ts
build\constant.ts
|
然後在
vite.config.ts
中引用:
vite.config.ts
|
|
Vite配置-build.terserOptions
說明
官網原文:
-
類型:
TerserOptions
傳遞給 Terser 的更多 minify 選項 。
其他的配置項自行研究,這裡只註釋一下
VbenAdmin
配置的代碼。
vite.config.ts
|
|
-
compress
:(默認{}
)-通過false
以完全跳過壓縮。傳遞一個對像以指定自定義 壓縮選項 。 -
compress.keep_infinity
:(默認值:false
)-通過true
以防止Infinity
被壓縮為1/0
,這可能會導致Chrome出現性能問題。 -
compress.drop_console
:(默認值:false
)-傳遞true
以放棄對console.*
函數的調用 。如果您希望在刪除函數調用後刪除特定的函數調用,例如console.info
和/或保留函數自變量的副作用,請pure_funcs
改用。
Vite配置-build.brotliSize
說明
官網原文:
-
類型:
boolean
-
默認:
true
啟用/禁用 brotli 壓縮大小報告。壓縮大型輸出文件可能會很慢,因此禁用該功能可能會提高大型項目的構建性能。
禁用就好。
效果對比
打開壓縮報告:
4.90s
關閉壓縮報告:
3.50s
,少了後面一串壓縮大小,肯定更快啦。
Vite配置-build.chunkSizeWarningLimit
說明
Vite配置-build.chunkSizeWarningLimit說明
官網原文:
-
類型:
number
-
默認:
500
chunk 大小警告的限制(以
kbs
為單位)。
在編寫代碼時,您可能已經添加了許多代碼拆分點以按需加載內容。編譯後,您可能會注意到一些塊太小了-造成更大的HTTP開銷。
LimitChunkCountPlugin
可以通過合併來對您的塊進行後處理。
Vite配置-define
說明
官網原文:
-
類型:
1
Record<string, string>
定義全局變量替換方式。每項在開發時會被定義為全局變量,而在構建時則是靜態替換。
-
從
2.0.0-beta.70
版本開始,字符串值將作為一個直接的表達式,所以如果定義為了一個字符串常量,它需要被顯式地引用(例如:通過JSON.stringify
)。 -
替換只會在匹配到周圍是單詞邊界(
\b
)時執行。
使用
看一下vue-i18n的應用。
原文:
Bundler 構建功能標誌
esm-bundler builds
現在暴露了全局特性標誌,這些標誌可以在編譯時被覆蓋。
-
__VUE_I18N_FULL_INSTALL__
:啟用/禁用,除了vue-i18n APIs
,組件和指令都完全支持安裝:true
-
__VUE_I18N_LEGACY_API__
:啟用/禁用vue-i18n
傳統風格的API
支持,默認為true
-
__INTLIFY_PROD_DEVTOOLS__
:在生產中啟用/禁用intlify-devtools
和vue-devtools
支持,默認為false
在沒有配置這些標誌的情況下,編譯也能正常工作,但強烈建議正確配置這些標誌,以便在最終的
bundle
中獲得正確的樹形搖動。
要配置這些標誌:
-
webpack
: 使用DefinePlugin
-
Rollup
: 使用@rollup/plugin-replace
-
Vite
:默認配置,但可以使用define
選項覆蓋
注意:替換值必須是布爾文,不能是字符串,否則
bundler/minifier
將無法正確評估條件。
如此,就按照VbenAdmin的原代碼一樣配置吧。不然vue-i18n還會包警告,當然,現在我們還沒有安裝vue-i18n。後面配置國際化的時候再講。
Vite配置-css.preprocessorOptions
說明
Vite配置-css.preprocessorOptions說明
官網原文:
-
類型:
1
Record<string, object>
指定傳遞給 CSS 預處理器的選項。例如:
vite.config.ts
|
|
安裝less
眾所周知
Antd
框架使用的是
less
。所以我們這裡研究less的配置。
安裝less:
|
|
VbenAdmin的全局樣式
在根目錄下的:
src\design
文件夾中定義了
VbenAdmin
所有 全局樣式 和 全局
less
變量 。其中分為兩大類:
-
src\design\index.less
:全局樣式,在main.ts
中使用。 -
src\design\config.less
:全局變量,在vite.config.ts
中使用。
至於該文件夾下的其他文件,都被直接或間接的引入到了
index.less
、
config.less
中。
我們這邊直接拷貝文件夾就行了,樣式也沒啥研究的。如果有能力的可以把和index.less相關的文件都刪除了,然後自己寫關於VbenAdmin的樣式。
但是變量不能動,很多都antd的變量,antd 的 less 變量 參考連結 。
複製完之後,順便將index.less在main.ts中引用一下。
Vite中的Less配置
代碼配置
|
|
代碼解析
- less-@import規則
- less-命令行語法
- lessjs-配置項
- lessjs-配置項-javascriptEnabled & modifyVars
- less-reference外文博客
- css hack匯總
- 史上最全的CSS hack方式一覽
- 關於Less js的@import實驗
less對應的對象可以查看 lessjs-配置項 。
-
javascriptEnabled
: true這行代碼沒得說,畢竟antd
的less
文件中使用JS
寫法,比如:\node_modules\ant-design-vue\lib\style\color\bezierEasing.less
-
modifyVars
是在全局less文件後面添加變量的配置。 modifyVars對應的對象屬性名會加上@追加到less文件後。 -
hack: true; @import (r...
:這一行代碼,在less文件中會被解析成:
|
|
那這個
hack
變量是幹什麼的?我感覺啥也沒有,單純是為了將後面的
@import
接上的
@import
會報錯,只寫。這行代碼可以隨便寫,比如:
|
|
我個人感覺這個
hack
和
css hack
單純名字一樣。至於
reference
,可以看一下關於
Less js的@import實驗
這篇博文即可理解。只是我個人疑惑為什麼這個
import
為什麼不寫在
globalVars
中。
Vite的顏色
說明
解析
build\config\themeConfig.ts
文件,直接創建這個文件。然後我們一段一段的分析:
|
|
第一部分3-16行代碼
|
|
第二部分18-22行代碼
|
|
調用的
@ant-design/colors
的顏色生成方法,將參數簡化了一下。
參考連結:
第三部分24-32行代碼
|
|
第四部分34-71行代碼
|
|
這裡直接根據顏色生成了98中顏色。我確實不太清楚這個麼多顏色幹什麼的。調用效果參考
build\vite\plugin\theme.ts
(現在先不管這個文件):
build/vite/plugin/theme.ts
|
#0960bd
生成的顏色:
|
|
第五部分73-104行代碼
|
這個方法就是生成
antd
主題變量對象的。將該對象的結果放到
Vite
的
less
配置中:
vite.config.ts
|
|
Vite配置-plugin
說明
官網原文:
-
類型:
1
(Plugin | Plugin[])[]
將要用到的插件數組。查看
插件 API
獲取
Vite
插件的更多細節。
配置插件
它接收一個插件對象,或者一個插件數組。由於我們需要配置很多插件,而每一個插件的配置也不一樣,所以我們把插件數組封裝到一個方法中去。統一配置
VbenAdmin
的插件。
創建生成插件數組方法
build/vite/plugin/index.ts
|
|
後續配置
vitePlugins
這個數組。
配置Vite插件
vite.config.ts
|
|
Vite插件-@vitejs-plugin-vue
說明
要編寫Vue程序,這個不用解釋了吧,在使用Vite創建應用程序的時候,這個依賴就已經默認加上了。
引入組件
vue插件不用配置,可以直接放進去。
build/vite/plugin/index.ts
|
|
Vite插件-@vitejs-plugin-vue-jsx
說明
為什麼使用
JSX
?
-
其實
JSX
的效果和我們在vue
的template
中寫的代碼效果是一樣的。最終都會被渲染成createElement
。 -
區別是
template
的標籤是不可變的
,我們要實現動態標籤,只能使用v-if
。而JSX
的最大特點就是靈活,我們可以隨意組裝HTML
代碼。
假如我們要實現一個組件渲染
<hn></hn>
標籤,
n
是我們傳入的參數。如果用
template
,那麼我們要寫
6
個
v-if
。但是如果使用
JSX
,我們就可以直接將
n
放到標籤中去。
參考連結
安裝
|
|
vue-jsx插件不用配置,可以直接放進去。
build/vite/plugin/index.ts
|
|
Vite插件-@vitejs-plugin-legacy
說明
原文描述:
注:此插件需要
vite@^2.0.0-beta.12
。
Vite
默認的瀏覽器支持基線是原生
ESM
。本插件為不支持原生
ESM
的傳統瀏覽器提供支持。
默認情況下,該插件將為最終
bundle
中的每個
chunk
生成一個相應的
legacy chunk
,用
@babel/reset-env
進行轉換,並以
SystemJS
模塊的形式發布(仍然支持代碼分割!)。
生成一個包含
SystemJS
運行時的
polyfill chunk
,以及由指定的瀏覽器目標和捆綁包中的實際使用情況決定的任何必要的
polyfills
。
在生成的HTML中註入
<script nomodule>
標籤,以便在沒有本地
ESM
支持的瀏覽器中有條件地加載
polyfills
和
legacy bundle
。
注入
import.meta.env.LEGACY env
變量,該變量僅在
legacy
生產構建中為真,而在所有其他情況下為假。(需要
vite@^2.0.0-beta.69
)。
所以這個是一個瀏覽器兼容的插件。我們直接安裝使用,個人感覺學習的話也用不上。
參考連結
安裝
|
|
VbenAdmin配置
build/vite/plugin/index.ts
:
build/vite/plugin/index.ts
|
|
Vite插件-vite-plugin-html
說明
原文描述:
一個為index.html提供 minify 和基於 EJS 模板功能的Vite插件。
-
minify:壓縮
index.html
代碼。 -
EJS:給
index.html
提供訪問變量的能力。
參考連結
安裝
|
|
創建配置文件
build/vite/plugin/html.ts
|
配置Vite插件
build/vite/plugin/index.ts
|
|
補充
做完本章操作之後,我突然發現項目不能編譯了。
總是報
package.json
找不到。我看了一下代碼,主要就是
build\vite\plugin\html.ts
中的導入無法找到。
我反復對比了一下
VbenAdmin
的源碼。也沒有發現有什麼不同的地方。
然後我又試了一下,當執行
vite
命令的時候,
build
文件夾下始終不能訪問
package.json
。但是
src
和
vite.config.ts
中都可以導入訪問。
那麼這裡有兩種講解方案:
去掉導入
這裡的導入只是我們在使用
_app.config.js
的時候加上一個版本信息。可以讓我們知道這個項目是多久打包的,打包的時候版本是多少。所以去掉也無妨,
_app.config.js
還是一樣可以訪問的。
從
vite.config.ts
中傳參下去
我使用了這個方案,因為萬一
build
文件夾其他地方要用
package.json
呢。不過用的地方應該也很少吧。
修改
vite.config.ts
:
vite.config.ts
|
|
修改
build/vite/plugin/index.ts
:
build/vite/plugin/index.ts
|
|
修改
build/vite/plugin/html.ts
:
build/vite/plugin/html.ts
|
|
完善build的utils.ts
說明
完善
build\utils.ts
文件。
第一部分
除了這個process,應該也沒有要解釋的吧。
build/utils.ts
|
|
安裝dotenv
dotenv
依賴的作用:從
.evn
文件流
Buffer
中讀取屬性輸出一個對象。
那麼和我們之前的加載環境變量的區別:
-
Vite
的loadEnv()
:這個方法Vite的官網上貌似沒有開放,而且獲取的文件是指定的,獲取的對象需要我們自己格式化一下。 -
Vben
的wrapperEnv()
:這是一個格式化環境變量的方法。 -
dotenv
:是一個依賴,其功能不僅僅是獲取環境變量,當然我們目前只用它來獲取指定的.env文件。
|
|
第二部分
build/utils.ts
|
|
Vben的獲取配置文件名的方法
build/getConfigFileName.ts
|
Vben動態配置環境變量
說明
前面章節中,我們在
build\vite\plugin
中註釋一段
index.html
中插入的
script
段。這一段
script
是用於
Vben
的動態配置環境變量的。
當你打包完項目之後,你的項目的環境變量就不可以變了。此時如果你想修改一下項目的基礎API路徑,那麼你需要修改
.env
文件,然後再次打包一遍。這麼做很麻煩。所以
VbenAdmin
將環境變量抽離出來。
當你的項目打包完成之後,如果你還想修改環境變量,那麼可以直接修改
dist
包下的
_app.config.js
文件。
下面看實現。
安裝fs-extra
|
|
fs-extra的npm首頁
:
fs-extra
添加本機
fs
模塊中未包含的文件系統方法。
編寫生成配置文件的程序
build/script/buildConf.ts
|
安裝yargs
yargs的npm首頁 :讀取你執行的命令行命令中的參數選項。
|
|
編寫腳本觸發文件
chalk的npm首頁 :一個彩色console.log的工具,這個依賴被其他依賴作為生產依賴安裝在本項目中了,所以也不去猜是哪個依賴的了,直接使用。
build/script/postBuild.ts
|
|
安裝esno
esno的npm首頁 :命令行執行一個TS文件
|
|
編寫腳本
在編譯的時候調用TS文件:
package.json
|
index.html注入配置文件
build/vite/plugin/html.ts
|
注意
之後在業務邏輯中獲取環境變量,就需要從這個
JS
文件中獲取了。從而達到在生產環境改配置的需求。
參考:
src\utils\env.ts
,但是這個後面再說。
Vite插件-vite-plugin-svg-icon
說明
當你使用該插件的時候,指定好存放
svg
的文件夾。再按照指定的方式去訪問
svg
圖片。就可以再不產生http請求的情況下渲染出
svg
圖片。
使用該插件時,插件會自動將所有
svg
圖片加載到
HTML
中。並且每一個
svg
將會被過濾去無用的信息數據。讓
svg
達到最小的值。之後使用
svg
圖片就只需要操作DOM即可,而不需要發送
http
請求。
安裝
|
|
創建配置
build/vite/plugin/svgSprite.ts
|
選項svgOptions的boolean類型不太清楚是乾什麼的。但是對像類型是控制svg過濾無用信息的選項。使用true是使用默認選項,false時不知道做什麼的但是也沒什麼影響。
用於配置
build/vite/plugin/index.ts
|
|
main導入
src/main.ts
|
|
創建Svg組件
這裡有一個樣式,是全局上下文注入的。這個後面再講,先寫成
string
。
src/components/Icon/src/SvgIcon.vue
|
|
Vite插件-vite-plugin-windicss
說明
在Vite上單獨使用
Tailwind
時,渲染速度很慢。
vite-plugin-windicss
比
Tailwind
快20到100倍。
安裝
|
|
創建Windicss配置文件
tailwind.config.ts
|
|
創建配置文件
build/vite/plugin/windicss.ts
|
|
應用配置
build/vite/plugin/index.ts
|
|
導入樣式
src/main.ts
|
|
Vite插件-vite-plugin-mock
說明
根據我自己的實驗:
localEnabled
控制mock開發環境是否啟動。
如果生產環境想要使用
mock
,只有
prodEnabled
為true,
injectCode
注入指定代碼時才會生效。
安裝
|
|
編寫Mock用例
這裡直接將根目錄下的
mock
目錄拷貝出來就行。
-
mock\_util.ts
:裡面封裝的是數據請求結構類型。 -
mock\_createProductionServer.ts
:用於配置生產環境動態Mock的js文件,文檔中有說。 -
其他的
:都是Mock用例,每一個js
、ts
,都要默認導出一個MockMethod
類型的數組。每一項MockMethod
就是攔截的一個方法。MockMethod
的response
對應方法的return
將會被Mock
實例處理。也就是說,你可以在return
的對像中使用 Mock規則 。
不過
_createProductionServer.ts
中使用了 Glob 導入 。
配置Mock
build/vite/plugin/mock.ts
|
配置進Vite
build/vite/plugin/index.ts
|
|
Vite插件-vite-plugin-purge-icons
說明
本章的插件是可以讓我們很方便高效的使用Iconify中所有的圖標。
這裡要講的是
Iconify
各個版本插件的區別:
-
Vue3版Iconify插件
:使用時需要安裝指定庫的圖標,然後靜態引用。每一次引用都會產生一次
http
請求。 -
PurgeIcons
:將我們所使用的
Iconify
圖標都已html
的dom
節點形式保存在html
中,這樣我們就可以不發送http
請求就可以使用圖標了。 -
vite-plugin-purge-icons
:就是
Vite
版的PurgeIcons
。
安裝
|
|
配置Vite
build/vite/plugin/index.ts
|
|
注意
Icon
組件後面再封裝,由於我們
main.ts
中沒有引入
vite-plugin-purge-icons
。所以,這裡還不能使用。後面會動態生成圖標。
Vite插件-vite-plugin-style-import
說明
vite-plugin-style-import的npm首頁
該插件可按需導入組件庫樣式,由於
vite
本身已按需導入了組件庫,因此僅樣式不是按需導入的,因此只需按需導入樣式即可。
安裝
|
|
配置插件
build/vite/plugin/styleImport.ts
|
配置Vite
build/vite/plugin/index.ts
|
|
Vite插件-rollup-plugin-visualizer
說明
- rollup-plugin-visualizer的npm首頁 :依賴分析插件。
- cross-env的npm首頁 :命令行配置環境變量。
安裝
|
|
配置插件
build/vite/plugin/visualizer.ts
|
配置Vite
build/vite/plugin/index.ts
|
|
安裝cross-env
|
|
編輯腳本
package.json
|
Vite插件-vite-plugin-theme
說明
vite-plugin-theme的npm首頁 : Git站點 ,npm的失效了。
用於動態更改界面主題色的 vite 插件。
配置插件
build/vite/plugin/theme.ts
|
配置Vite
build/vite/plugin/index.ts
|
|
修改主題方法
之後要修改主題,直接調用一下這個方法即可。
src/logics/theme/index.ts
|
|
Vite插件-vite-plugin-imagemin
說明
vite-plugin-imagemin的npm首頁 :一個壓縮圖片資源的 vite 插件。
配置鏡像(用於安裝imagemin的依賴,因為中國可能沒有安裝imagemin。)
若非
中國用戶
,可跳過配置鏡像
package.json
|
|
|
配置插件
build/vite/plugin/imagemin.ts
|
|
配置Vite
build/vite/plugin/index.ts
|
|
Vite插件-vite-plugin-compression
說明
vite-plugin-compression的npm首頁
:
vite-plugin-compress
的增強版,壓縮用的。
安裝
|
|
配置插件
build/vite/plugin/compress.ts
|
配置Vite
build/vite/plugin/index.ts
|
|
Vite插件-vite-plugin-pwa
說明
安裝
|
|
配置插件
build/vite/plugin/pwa.ts
|
配置Vite
build/vite/plugin/index.ts
|
|
Vite配置-optimizeDeps.include
說明
原文:
類型:
string[]
默認情況下,不在
node_modules
中的,鏈接的包不會被預構建。使用此選項可強制預構建鏈接的包。
安裝moment
antd
中需要使用
moment
。而
moment
配置和本章有關,所以就順便安裝一下:
|
|
配置Vite
vite.config.ts
|
|
Vite配置-optimizeDeps.exclude
說明
原文:
類型:
string[]
在預構建中強制排除的依賴項。
配置Vite
vite.config.ts
|
|
http-server
說明
項目編譯之後的靜態文件是不能直接本地訪問的。因為本地訪問使用的是
file:///
協議。而
file:///
不支持跨域和一些其他特性。比如
JavaScript模塊
、PWA等等。
那麼此時就需要換一種訪問本地文件的方式了,就是讓本地成為一個服務器。通過
http
來訪問。
http-server
就可以實現以
http
形式訪問本地文件的目的,但是這個依賴不保證安全,只用於本地測試。
http-server的npm首頁
:命令行啟動一個本地服務器。不安全,但是可以用來測試。
安裝
|
|
配置腳本
package.json
|