最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue3+vite多項(xiàng)目多模塊打包(基于vite-plugin-html插件)

 更新時(shí)間:2023年07月04日 11:47:07   作者:百變魔旅  
這篇文章主要給大家介紹了關(guān)于vue3+vite基于vite-plugin-html插件實(shí)現(xiàn)多項(xiàng)目多模塊打包的相關(guān)資料,現(xiàn)在很多小伙伴都已經(jīng)使用Vite+Vue3開發(fā)項(xiàng)目了,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

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.htmlnanjing.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) baseUrltypes、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)文章

  • vxe-list?vue?如何實(shí)現(xiàn)下拉框的虛擬列表

    vxe-list?vue?如何實(shí)現(xiàn)下拉框的虛擬列表

    這篇文章主要介紹了vxe-list?vue?如何實(shí)現(xiàn)下拉框的虛擬列表,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • vue輕量級(jí)框架無法獲取到vue對(duì)象解決方法

    vue輕量級(jí)框架無法獲取到vue對(duì)象解決方法

    這篇文章主要介紹了vue輕量級(jí)框架無法獲取到vue對(duì)象解決方法相關(guān)知識(shí)點(diǎn),有需要的讀者們跟著學(xué)習(xí)下。
    2019-05-05
  • Vue實(shí)現(xiàn)自定義組件改變組件背景色(示例代碼)

    Vue實(shí)現(xiàn)自定義組件改變組件背景色(示例代碼)

    要實(shí)現(xiàn) Vue 自定義組件改變組件背景色,你可以通過 props 將背景色作為組件的一個(gè)屬性傳遞給組件,在組件內(nèi)部監(jiān)聽這個(gè)屬性的變化,并將其應(yīng)用到組件的樣式中,下面通過示例代碼介紹Vue如何實(shí)現(xiàn)自定義組件改變組件背景色,感興趣的朋友一起看看吧
    2024-03-03
  • vue之封裝多個(gè)組件調(diào)用同一接口的案例

    vue之封裝多個(gè)組件調(diào)用同一接口的案例

    這篇文章主要介紹了vue之封裝多個(gè)組件調(diào)用同一接口的案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • vue3中hooks的概述及用法小結(jié)

    vue3中hooks的概述及用法小結(jié)

    這篇文章是介紹一下vue3中的hooks以及它的用法,主要圍繞兩點(diǎn)來介紹,一個(gè)是hooks基本概念,另一個(gè)是vue3中hooks的使用方法,本文結(jié)合實(shí)例代碼給大家講解的非常詳細(xì),需要的朋友參考下吧
    2023-03-03
  • Vue父子模版?zhèn)髦导敖M件傳值的三種方法

    Vue父子模版?zhèn)髦导敖M件傳值的三種方法

    這篇文章主要介紹了Vue父子模版?zhèn)髦导敖M件傳值的三種方法,需要的朋友可以參考下
    2017-11-11
  • Vue表單demo v-model雙向綁定問題

    Vue表單demo v-model雙向綁定問題

    本文通過實(shí)例代碼給大家介紹了Vue表單demo v-model雙向綁定問題,代碼簡單易懂非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-06-06
  • 使用vue-antd動(dòng)態(tài)切換主題

    使用vue-antd動(dòng)態(tài)切換主題

    這篇文章主要介紹了使用vue-antd動(dòng)態(tài)切換主題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Vue移動(dòng)端右滑屏幕返回上一頁附源碼下載

    Vue移動(dòng)端右滑屏幕返回上一頁附源碼下載

    這篇文章主要介紹了Vue移動(dòng)端右滑屏幕返回上一頁,本文結(jié)合實(shí)例給大家介紹的非常詳細(xì),并附有源碼下載,需要的朋友可以參考下
    2019-06-06
  • Vue3?Webview轉(zhuǎn)Android虛擬導(dǎo)航欄遮擋問題解決實(shí)錄

    Vue3?Webview轉(zhuǎn)Android虛擬導(dǎo)航欄遮擋問題解決實(shí)錄

    這篇文章主要介紹了Vue3?Webview轉(zhuǎn)Android虛擬導(dǎo)航欄遮擋問題解決的相關(guān)資料,文中通過JavaScript動(dòng)態(tài)估算安全區(qū)域高度,并通過CSS變量傳遞給樣式層,最終解決了這個(gè)問題,需要的朋友可以參考下
    2026-03-03

最新評(píng)論

奉贤区| 安塞县| 龙山县| 万宁市| 唐海县| 周宁县| 安福县| 印江| 资阳市| 兴宁市| 图片| 商南县| 禹州市| 眉山市| 泰州市| 连南| 靖远县| 镇沅| 青河县| 高陵县| 丹阳市| 左权县| 渝中区| 普陀区| 太湖县| 亳州市| 琼结县| 晋城| 桐乡市| 长海县| 离岛区| 玉山县| 嘉鱼县| 桃园市| 扎兰屯市| 黄大仙区| 舒城县| 都兰县| 常山县| 库伦旗| 景德镇市|