vue3+vite多項(xiàng)目多模塊打包(基于vite-plugin-html插件)
vue3 + vite 多項(xiàng)目多模塊打包
本示例基于
vite-plugin-html
插件,實(shí)現(xiàn)多個(gè)獨(dú)立項(xiàng)目共存,共享組件和依賴,運(yùn)行、打包互不干擾。
npm create vite@latest
兼容性注意
Vite 需要 Node.js 14.18+、16+版本,有些模板需要更高的版本
雖然創(chuàng)建項(xiàng)目用的14.17.5版本,但是后面運(yùn)行項(xiàng)目用的18.15.0
HTML模板插件
npm i vite-plugin-html -D
#vite.config.ts import {defineConfig} from "vite" import vue from '@vitejs/plugin-vue' import {createHtmlPlugin} from 'vite-plugin-html' const htmlParams = { minify: true, pages: [ { filename: 'index', // filename 默認(rèn)是template文件名,就是index.html entry: '/src/main.ts', template: 'index.html', } ] } export default defineConfig({ base: './', // 方便打包后預(yù)覽 publicDir: 'public', // 默認(rèn) public plugins: [vue(), createHtmlPlugin(htmlParams)], build: { cssCodeSplit: true, emptyOutDir: true, sourcemap: false, assetsDir: 'assets', // 默認(rèn) assets outDir: 'dist', // 默認(rèn) dist rollupOptions: { input: {}, // input 不用管,插件內(nèi)會(huì)處理 output: { compact: true, entryFileNames: "static/js/[name]-[hash].js", chunkFileNames: "static/js/[name]-[hash].js", assetFileNames: "static/[ext]/[name].[ext]", } } } })
打包一下 驗(yàn)證插件效果
npm run build
目錄改造
beijing.html
nanjing.html
src
- beijing
- App.vue
- main.ts
- nanjing
- App.vue
- main.ts
新增文件(項(xiàng)目模板):beijing.html
、nanjing.html
# beijing.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <link rel="icon" type="image/svg+xml" href="/static/imgs/vite.svg" rel="external nofollow" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>北京項(xiàng)目</title> </head> <body> <div id="app"></div> <script type="module" src="/src/beijing/main.ts"></script> </body> </html>
nanjing.html
內(nèi)容略(把北京的復(fù)制一份)
新增目錄及項(xiàng)目文件:beijing/App.vue
、beijing/main.ts
、nanjing/App.vue
、nanjing/main.ts
# beijing/main.ts import { createApp } from 'vue' import '../style.css' import App from './App.vue' createApp(App).mount('#app')
# beijing/App.vue <script setup lang="ts"> import HelloWorld from '../components/HelloWorld.vue' </script> <template> <div> <img src="/static/imgs/vite.svg" class="logo" alt="Vite logo"/> <img src="../assets/vue.svg" class="logo vue" alt="Vue logo"/> <h1>北京項(xiàng)目</h1> </div> <HelloWorld msg="HelloWorld"/> </template>
nanjing/App.vue
、nanjing/main.ts
內(nèi)容略(把北京的復(fù)制一份)
注意文件路徑,例如:
vite.svg
、vue.svg
、style.css
#vite.config.ts import {defineConfig} from "vite" import vue from '@vitejs/plugin-vue' import {createHtmlPlugin} from 'vite-plugin-html' const htmlParams = { minify: true, pages: [ { filename: 'beijing', // filename 默認(rèn)是template文件名,就是beijing.html entry: '/src/beijing/main.ts', template: 'beijing.html', }, { filename: 'nanjing', entry: '/src/nanjing/main.ts', template: 'nanjing.html', }, ] } export default defineConfig({ base: './', // 方便打包后預(yù)覽 publicDir: 'public', // 默認(rèn) public plugins: [vue(), createHtmlPlugin(htmlParams)], build: { cssCodeSplit: true, emptyOutDir: true, sourcemap: false, assetsDir: 'assets', // 默認(rèn) assets outDir: 'dist', // 默認(rèn) dist rollupOptions: { input: {}, // input 不用管,插件內(nèi)會(huì)處理 output: { compact: true, entryFileNames: "static/js/[name]-[hash].js", chunkFileNames: "static/js/[name]-[hash].js", assetFileNames: "static/[ext]/[name].[ext]", } } } })
打包結(jié)果
我這的java
項(xiàng)目集成的是FreeMarker
,
把項(xiàng)目模板beijing.html
改成beijing.ftl
,修改文件里對(duì)應(yīng)的靜態(tài)資源路徑,
前端打包之后,把dist
下面的文件同步到java
項(xiàng)目的static
目錄。
別名配置
ts 配置,新增項(xiàng)
baseUrl
、types
、paths
# tsconfig.json { "compilerOptions": { "target": "ESNext", "useDefineForClassFields": true, "module": "ESNext", "moduleResolution": "Node", "strict": true, "jsx": "preserve", "resolveJsonModule": true, "isolatedModules": true, "esModuleInterop": true, "lib": ["ESNext", "DOM"], "skipLibCheck": true, "noEmit": true, "baseUrl": "src", "types": ["vite/client"], "paths": {"@/*": ["./*"]} }, "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"], "references": [{ "path": "./tsconfig.node.json" }] }
vite 配置,新增項(xiàng)
resolve.alias
# vite.config.ts import {resolve} from "path"; import {defineConfig} from "vite" import vue from '@vitejs/plugin-vue' import {createHtmlPlugin} from 'vite-plugin-html' const htmlParams = { minify: true, pages: [ { filename: 'beijing', // filename 默認(rèn)是template文件名,就是beijing.html entry: '/src/beijing/main.ts', template: 'beijing.html', }, { filename: 'nanjing', entry: '/src/nanjing/main.ts', template: 'nanjing.html', }, ] } export default defineConfig({ base: './', // 方便打包后預(yù)覽 publicDir: 'public', // 默認(rèn) public plugins: [vue(), createHtmlPlugin(htmlParams)], resolve: { alias: { '@': resolve(__dirname, 'src'), } }, build: { cssCodeSplit: true, emptyOutDir: true, sourcemap: false, assetsDir: 'assets', // 默認(rèn) assets outDir: 'dist', // 默認(rèn) dist rollupOptions: { input: {}, // input 不用管,插件內(nèi)會(huì)處理 output: { compact: true, entryFileNames: "static/js/[name]-[hash].js", chunkFileNames: "static/js/[name]-[hash].js", assetFileNames: "static/[ext]/[name].[ext]", } } } })
項(xiàng)目里面,引入文件:"../assets/vue.svg"
、"../components/HelloWorld.vue"
改為 "@/assets/vue.svg"
、"@/components/HelloWorld.vue"
總結(jié)
到此這篇關(guān)于vue3+vite多項(xiàng)目多模塊打包的文章就介紹到這了,更多相關(guān)vue3 vite多項(xiàng)目打包內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用vue + less 實(shí)現(xiàn)簡(jiǎn)單換膚功能的示例
下面小編就為大家分享一篇使用vue + less 實(shí)現(xiàn)簡(jiǎn)單換膚功能的示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-02-02vue中父子組件注意事項(xiàng),傳值及slot應(yīng)用技巧
這篇文章主要介紹了vue中父子組件注意事項(xiàng),傳值及slot應(yīng)用技巧,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-05-05Vue讀取本地靜態(tài).md并側(cè)邊欄導(dǎo)航跳轉(zhuǎn)、展示.md文件的操作方法
這篇文章主要介紹了Vue讀取本地靜態(tài).md并側(cè)邊欄導(dǎo)航跳轉(zhuǎn)、展示.md文件,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-08-08Vue通過(guò)WebSocket建立長(zhǎng)連接的實(shí)現(xiàn)代碼
這篇文章主要介紹了Vue通過(guò)WebSocket建立長(zhǎng)連接的實(shí)現(xiàn)代碼,文中給出了問(wèn)題及解決方案,需要的朋友可以參考下2019-11-11使用Vue3+ts?開(kāi)發(fā)ProTable源碼教程示例
這篇文章主要為大家介紹了使用Vue3+ts?開(kāi)發(fā)ProTable源碼示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07學(xué)習(xí)Vue框架中必掌握的重點(diǎn)知識(shí)
這篇文章主要介紹了學(xué)習(xí)Vue中必掌握的重點(diǎn)知識(shí),想了解vue的同學(xué)可以參考下2021-04-04Vue表單數(shù)據(jù)修改與刪除功能實(shí)現(xiàn)
本文通過(guò)實(shí)例代碼介紹了Vue表單數(shù)據(jù)修改與刪除功能實(shí)現(xiàn),結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友跟隨小編一起看看吧2023-10-10vue 設(shè)置proxyTable參數(shù)進(jìn)行代理跨域
這篇文章主要介紹了vue 設(shè)置proxyTable參數(shù)進(jìn)行代理跨域的相關(guān)資料,及代理跨域的概念原理,需要的朋友可以參考下2018-04-04Vue數(shù)據(jù)更新但頁(yè)面沒(méi)有更新的多種情況問(wèn)題及解決
這篇文章主要介紹了Vue數(shù)據(jù)更新但頁(yè)面沒(méi)有更新的多種情況問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07Element中el-select下拉框?qū)崿F(xiàn)選中圖標(biāo)并回顯圖標(biāo)
本文主要介紹了Element中el-select下拉框?qū)崿F(xiàn)選中圖標(biāo)并回顯圖標(biāo),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-12-12