vue3+vite配置多頁面的示例代碼
通過配置多頁面應(yīng)用,從而將給子模塊依賴分隔開各自加載,可以減少初始資源的請求,加快頁面的訪問速度。
比如我們有很多H5頁面,并且相互獨(dú)立,比如報(bào)修,購卡,計(jì)價規(guī)則等等,那我們?nèi)绻L問購卡,只需要通過/buyCards/進(jìn)行訪問,不需要初始資源的加載支持。
目錄結(jié)構(gòu)
├── build 打包后的靜態(tài)資源目錄
├── mock mock服務(wù) todo
└── src 項(xiàng)目資源目錄
└── assets 項(xiàng)目靜態(tài)資源
├── common 全局方法公共庫
└── utils.ts 全局公共方法
└── constants.ts 全局公共常量
├── components 公共組件
├── interface 公共模型
├── pages 頁面模塊
├── xxx 頁面模塊A
├── apis 接口定義
├── components 頁面組件
└── router 路由配置
└── store store配置
└── common 模塊公共庫
└── utils.ts 模塊公共工具方法
└── constants.ts 模塊常量
└── eventMap.ts 模塊埋點(diǎn)枚舉
└── views 模塊頁面
└── App.vue 入口根節(jié)點(diǎn)
└── index.html 入口頁面
└── main.ts 入口頁面文件
├── xxx 頁面模塊B
├── apis 接口定義
├── components 頁面組件
└── router 路由配置
└── store store配置
└── common 模塊公共庫
└── utils.ts 模塊公共工具方法
└── constants.ts 模塊常量
└── eventMap.ts 模塊埋點(diǎn)枚舉
└── views 模塊頁面
└── App.vue 入口根節(jié)點(diǎn)
└── index.html 入口頁面
└── main.ts 入口頁面文件
├── xxx 初始化入口文件
├── style 公共樣式模塊
├── types 依賴庫類型定義
└── .browserslistrc 瀏覽器兼容配置
└── .eslintignore eslint忽略文件配置
└── .eslintrc.cjs eslint規(guī)則配置
└── .gitignore gitignore配置
└── .prettierignore prettier忽略文件配置
└── .prettierrrc.js prettier文件配置
└── .vue.config.ts 項(xiàng)目打包配置文件src/index.html是默認(rèn)啟動初始化項(xiàng)目時候的一個入口文件,代碼如下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>初始化頁面路由</title>
</head>
<body>
<p><a href="">重定向頁面</a></p>
<script>
</script>
</body>
</html>vite配置多頁面 vite.config
修改root
修改root參數(shù)為多頁面的根目錄: 根據(jù)不同的目錄結(jié)構(gòu)而修改
● 類型: string
● 默認(rèn): process.cwd()
項(xiàng)目根目錄(index.html 文件所在的位置)??梢允且粋€絕對路徑,或者一個相對于該配置文件本身的相對路徑。
根據(jù)上述目錄工程里,所以修改為root: './src/pages'
修改base
base修改為'/',避免后續(xù)打包路徑有問題
● 類型: string
● 默認(rèn): /
開發(fā)或生產(chǎn)環(huán)境服務(wù)的公共基礎(chǔ)路徑。合法的值包括以下幾種:
● 絕對 URL 路徑名,例如 /foo/
● 完整的 URL,例如 https://foo.com/● 空字符串或 ./(用于嵌入形式的開發(fā))
修改build.outDir
outDir: resolve(process.cwd(), 'build'), // 指定輸出路徑(相對于 項(xiàng)目根目錄)
● 類型: string
● 默認(rèn): dist
指定輸出路徑(相對于 項(xiàng)目根目錄).
修改rollupOptions.input
rollupOptions.input配置多個頁面的輸入,可以動態(tài)根據(jù)/pages文件夾下讀取,可參考如下代碼
const getEntryPath = (globPath: string) => {
const pageEntry = {}
glob.sync("./src/pages/**/index.html").forEach((entry: string) => {
const pathArr: string = entry.split("/");
const name: string = pathArr[pathArr.length - 2];
pageEntry[name] = join(process.cwd(), `/src/pages/${name}/index.html`)
})
delete pageEntry.pages
delete pageEntry.index //此處是為了刪除初始化頁面,這個可根據(jù)頁面需要自行決定
return pageEntry // 整體效果如下圖
}
// 自定義底層的 Rollup 打包配置
rollupOptions: {
input: getEntryPath()
}
訪問頁面
頁面A:http://127.0.0.1:8080/newWallet/index.html#/頁面B:http://127.0.0.1:8080/demo/index.html#/
以下是完整vite.config 僅供參考
import { defineConfig,loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import path, { resolve, join } from 'path'
import autoprefixer from 'autoprefixer';
import postCssPxToRem from 'postcss-pxtorem';
import AutoImport from "unplugin-auto-import/vite"
import glob from "glob";
import eslintPlugin from 'vite-plugin-eslint' //導(dǎo)入包
const assetsPath = (path: string) => {
return join('static', path)
}
const getEntryPath = (globPath: string) => {
const pageEntry = {}
glob.sync("./src/pages/**/index.html").forEach((entry: string) => {
const pathArr: string = entry.split("/");
const name: string = pathArr[pathArr.length - 2];
pageEntry[name] = join(process.cwd(), `/src/pages/${name}/index.html`)
})
delete pageEntry.pages
delete pageEntry.index
console.log(pageEntry)
return pageEntry
}
export default defineConfig({
root: './src/pages',
base: '/',
define: {},
plugins: [
vue(),
AutoImport ({
imports: ["vue", "vue-router", "pinia"], // 自動導(dǎo)入vue和vue-router相關(guān)函數(shù)(只有組件里哦,ts或js文件里面不行~~~)
dts: 'types/auto-import.d.ts' //生成全局引入的文件
}),
// 增加下面的配置項(xiàng),這樣在運(yùn)行時就能檢查eslint規(guī)范
eslintPlugin({
include: ['src/**/*.js', 'src/**/*.vue', 'src/*.js', 'src/*.vue'],
exclude: ['./node_modules/**', './src/types/**'],
cache: false
}),
],
resolve: {
alias: [
{
find: "@",
replacement: resolve(__dirname, "src")
}
]
},
css: {
postcss: {
plugins: [
autoprefixer({
overrideBrowserslist: ['Android 4.1', 'iOS 7.1', 'Chrome > 31', 'ff > 31', 'ie >= 8'],
}),
postCssPxToRem({
// 自適應(yīng),px>rem轉(zhuǎn)換
rootValue: 75, // 75表示750設(shè)計(jì)稿,37.5表示375設(shè)計(jì)稿
propList: ['*'], // 需要轉(zhuǎn)換的屬性,這里選擇全部都進(jìn)行轉(zhuǎn)換
selectorBlackList: ['norem'], // 過濾掉norem-開頭的class,不進(jìn)行rem轉(zhuǎn)換
}),
],
}
},
server: {
host: 'localhost', // 指定服務(wù)器應(yīng)該監(jiān)聽哪個 IP 地址
port: 8080, // 端口
strictPort: false, // 若端口已被占用,嘗試下移一格端口
open: true,
proxy: {
'/gateway': {
target: process.env.VITE_API_URL || 'https://pinzhi.didichuxing.com',
ws: true,
changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, ''),
},
},
},
build: {
outDir: resolve(process.cwd(),'build'),// 指定輸出路徑(相對于 項(xiàng)目根目錄)
sourcemap: false, // 構(gòu)建后是否生成 source map 文件
chunkSizeWarningLimit: 1500, // 規(guī)定觸發(fā)警告的 chunk(文件塊) 大小
assetsDir: 'static',
minify: 'esbuild',
rollupOptions: { // 自定義底層的 Rollup 打包配置
input: getEntryPath(),
output: {
entryFileNames: assetsPath('js/[name].js'),
chunkFileNames: assetsPath('js/[name].js'),
assetFileNames: assetsPath('css/[name].[ext]'),
compact: true,
manualChunks: (id: string) => {
if(id.includes("node_modules")) {
return id.toString().split('node_modules/')[1].split('/')[0].toString(); // 拆分多個vendors
}
}
},
},
emptyOutDir: true,
}
})到此這篇關(guān)于vue3+vite配置多頁面的文章就介紹到這了,更多相關(guān)vue3 vite配置多頁面內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue項(xiàng)目通過a標(biāo)簽下載圖片至zip包的示例代碼
在vue項(xiàng)目中,將圖片下載可使用流的形式,下載成單個圖片,或者將多個圖片下載至zip包,本文就是介紹使用a標(biāo)簽下載圖片的用法,文中有詳細(xì)的代碼示例供大家參考,具有一定的參考價值,需要的朋友可以參考下2023-10-10
Vue3實(shí)現(xiàn)canvas畫布組件自定義畫板實(shí)例代碼
Vue?Canvas是一個基于Vue.js的輕量級畫板組件,旨在提供一個簡易的畫布功能,用戶可以在網(wǎng)頁上進(jìn)行自由繪圖,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-09-09
使用VueCli3+TypeScript+Vuex一步步構(gòu)建todoList的方法
這篇文章主要介紹了使用VueCli3+TypeScript+Vuex一步步構(gòu)建todoList的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
詳解Vue.js之視圖和數(shù)據(jù)的雙向綁定(v-model)
本篇文章主要介紹了Vue.js之視圖和數(shù)據(jù)的雙向綁定(v-model),使用v-model指令,使得視圖和數(shù)據(jù)實(shí)現(xiàn)雙向綁定,有興趣的可以了解一下2017-06-06
vue3中實(shí)現(xiàn)組件通信的方法總結(jié)
在Vue3中,有多種方法可以實(shí)現(xiàn)組件之間的通信,本文就通過代碼示例給大家總結(jié)一些vue3實(shí)現(xiàn)組件通信的常用方法,需要的朋友可以參考下2023-06-06
詳細(xì)聊聊vue組件是如何實(shí)現(xiàn)組件通訊的
組件間通信簡單來說就是組件間進(jìn)行數(shù)據(jù)傳遞,就像我們?nèi)粘5拇螂娫?就是通訊的一種方式,下面這篇文章主要給大家介紹了關(guān)于vue組件是如何實(shí)現(xiàn)組件通訊的相關(guān)資料,需要的朋友可以參考下2022-05-05
詳解Vue.js iview實(shí)現(xiàn)樹形權(quán)限表(可擴(kuò)展表)
這篇文章主要介紹了詳解Vue.js iview實(shí)現(xiàn)樹形權(quán)限表(可擴(kuò)展表),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-09-09

