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

Vue3+Vite多項(xiàng)目多dist打包操作實(shí)現(xiàn)方式

 更新時(shí)間:2025年12月04日 08:42:05   作者:竭點(diǎn)  
本文介紹了如何使用Vue3和Vite搭建多項(xiàng)目環(huán)境,并在打包時(shí)生成多個(gè)dist包,通過(guò)創(chuàng)建主項(xiàng)目環(huán)境、配置多個(gè)dist包、以及執(zhí)行打包操作,可以實(shí)現(xiàn)多個(gè)子項(xiàng)目的獨(dú)立管理

在前端開(kāi)發(fā)中,Vue 3 和 Vite 已經(jīng)成為了越來(lái)越受歡迎的工具。其中,Vite 作為一個(gè)快速構(gòu)建工具,與 Vue 3 結(jié)合使用,可以提高開(kāi)發(fā)效率和性能。

在實(shí)際項(xiàng)目中,一個(gè)項(xiàng)目會(huì)包含多個(gè)子項(xiàng)目,需要達(dá)成多個(gè)子項(xiàng)目的dist包。本文將介紹如何使用 Vue 3 + Vite 搭建多項(xiàng)目環(huán)境,并在打包時(shí)生成多個(gè) dist 包。

1. 創(chuàng)建一個(gè)主項(xiàng)目環(huán)境

使用命令,快速創(chuàng)建一個(gè)住項(xiàng)目的環(huán)境

npm create vue@latest

2. 子項(xiàng)目目錄

3. 子項(xiàng)目文件

在兩個(gè)子項(xiàng)目中分別創(chuàng)建App.vue和main.js文件

我這里的代碼直接使用vue創(chuàng)建時(shí)的代碼,需要改的地方是資源,文件的路徑

App.vue

```javascript
<script setup>
import { RouterLink, RouterView } from 'vue-router'
import HelloWorld from '../../components/HelloWorld.vue'
</script>

<template>
  <header>
    <img alt="Vue logo" class="logo" src="../../assets/logo.svg" width="125" height="125" />

    <div class="wrapper">
      <HelloWorld msg="You did it!" />

      <nav>
        <RouterLink to="/">Home</RouterLink>
        <RouterLink to="/about">About</RouterLink>
      </nav>
    </div>
  </header>

  <RouterView />
</template>

<style scoped>
header {
  line-height: 1.5;
  max-height: 100vh;
}

.logo {
  display: block;
  margin: 0 auto 2rem;
}

nav {
  width: 100%;
  font-size: 12px;
  text-align: center;
  margin-top: 2rem;
}

nav a.router-link-exact-active {
  color: var(--color-text);
}

nav a.router-link-exact-active:hover {
  background-color: transparent;
}

nav a {
  display: inline-block;
  padding: 0 1rem;
  border-left: 1px solid var(--color-border);
}

nav a:first-of-type {
  border: 0;
}

@media (min-width: 1024px) {
  header {
    display: flex;
    place-items: center;
    padding-right: calc(var(--section-gap) / 2);
  }

  .logo {
    margin: 0 2rem 0 0;
  }

  header .wrapper {
    display: flex;
    place-items: flex-start;
    flex-wrap: wrap;
  }

  nav {
    text-align: left;
    margin-left: -1rem;
    font-size: 1rem;

    padding: 1rem 0;
    margin-top: 1rem;
  }
}
</style>

main.js

import '../../assets/main.css'

import { createApp } from 'vue'
import { createPinia } from 'pinia'

import App from './App.vue'
import router from '../../router'

const app = createApp(App)

app.use(createPinia())
app.use(router)

app.mount('#app')

然后在于index.html同級(jí)的地方添加兩個(gè)對(duì)應(yīng)子項(xiàng)目 的html,如果項(xiàng)目的title,圖標(biāo)一致,可以直接用index.html,不需要新建html文件

projecta.html

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <link rel="icon" href="/favicon.ico" rel="external nofollow" >
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>項(xiàng)目Ap</title>
  </head>
  <body>
    <div id="app"></div>
    <script type="module" src="/src/projects/projectA/main.js"></script>
  </body>
</html>

4. 配置多個(gè) dist 包

新建projectConfig.js,存放子項(xiàng)目的入口配置

export const configMap = {
    projectA:{
      minify: true,
      pages: [
          {
              filename: 'projecta', // filename 默認(rèn)是template文件名,就是beijing.html
              entry: 'src/projects/projectA/main.js',
              template: 'projecta.html',
          },   
      ],
    },
    projectB:{
      minify: true,
      pages: [
          {
              filename: 'projectb',
              entry: 'src/projects/proiectB/main.js',
              template: 'projectb.html',
          },
      ],
    }
  }
  

然后修改vite.config.js如下:

import { fileURLToPath, URL } from 'node:url'

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import { createHtmlPlugin } from 'vite-plugin-html';
import { resolve } from 'node:path';
import { configMap } from './projectConfig'

const projectName = process.env.PROJECT_NAME
export default defineConfig({
    base: './',             // 方便打包后預(yù)覽
    publicDir: 'public',    // 默認(rèn) public
    plugins: [
        vue(),
        createHtmlPlugin(configMap[projectName])
    ],
    resolve:{
      alias:{
        '@':resolve(__dirname,'src')
      }
    },
    build: 
        {
            cssCodeSplit: true,
            emptyOutDir: true,
            sourcemap: false,
            assetsDir: 'assets', // 默認(rèn) assets
            outDir: `dist-${projectName}`, // 輸出到dist
            rollupOptions: {
                input: {
                },
                output: {
                    compact: true,
                    entryFileNames: "assets/js/[name]-[hash].js",
                    chunkFileNames: "assets/js/[name]-[hash].js",
                    assetFileNames: "assets/[ext]/[name].[ext]",
                }
            }
        },
        
})

package.json文件也需要重新修改scripts部分,主要實(shí)現(xiàn)npm run build打出多個(gè)dist包

package.json

  "scripts": {
    "dev": "vite",
    "build": "node dynamic-build-all.js",
    "preview": "vite preview"
  },

dynamic-build-all.js:

import { projects } from './projects.js';
import { execSync } from 'child_process';
const projectNames = Object.keys(projects);
for (const projectName of projectNames) {
  console.log(`Building ${projectName}...`);
  const command = projects[projectName].buildCommand;
  execSync(command, { stdio: 'inherit' });
}

projects.js存放項(xiàng)目配置

export const projects = {
    projectA: {
      name: "projectA",
      buildCommand: "cross-env PROJECT_NAME=projectA vite build",
      desc: "協(xié)議一"
    },
    projectB: {
      name: "projectB",
      buildCommand: "cross-env PROJECT_NAME=projectB vite build",
      desc: "協(xié)議二"
    }
}

5. 打包操作

多個(gè)包的配置已經(jīng)完善,直接執(zhí)行打包命令即可

npm run build

通過(guò)以上操作,我們可以輕松地在 Vue 3 + Vite 環(huán)境下管理多個(gè)項(xiàng)目,并通過(guò)配置不同的 Vite 配置文件來(lái)生成多個(gè)獨(dú)立的 dist 包。

這樣,我們可以更加靈活地進(jìn)行項(xiàng)目管理和部署。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue?的全選組件封裝你知道多少

    vue?的全選組件封裝你知道多少

    這篇文章主要為大家詳細(xì)介紹了vue的全選組件封裝,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • Vue實(shí)例掛載的全流程詳解

    Vue實(shí)例掛載的全流程詳解

    理解?Vue?實(shí)例的掛載過(guò)程,不僅有助于我們更好地掌握?Vue?的核心原理,還能提高我們?cè)陂_(kāi)發(fā)中的調(diào)試和優(yōu)化能力,下面就跟隨小編一起學(xué)習(xí)一下吧
    2024-12-12
  • 詳解如何使用vue實(shí)現(xiàn)可視化界面設(shè)計(jì)

    詳解如何使用vue實(shí)現(xiàn)可視化界面設(shè)計(jì)

    Vue是一款流行的前端開(kāi)發(fā)框架,它的響應(yīng)式數(shù)據(jù)綁定和組件化特性使得它成為了可視化界面設(shè)計(jì)的一個(gè)理想選擇,本文將介紹如何使用Vue實(shí)現(xiàn)可視化界面設(shè)計(jì),并且演示一個(gè)基于Vue的可視化界面設(shè)計(jì)案例,需要的朋友可以參考下
    2023-12-12
  • vue實(shí)現(xiàn)簡(jiǎn)單無(wú)縫滾動(dòng)效果

    vue實(shí)現(xiàn)簡(jiǎn)單無(wú)縫滾動(dòng)效果

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)簡(jiǎn)單無(wú)縫滾動(dòng)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Vue.js使用$.ajax和vue-resource實(shí)現(xiàn)OAuth的注冊(cè)、登錄、注銷和API調(diào)用

    Vue.js使用$.ajax和vue-resource實(shí)現(xiàn)OAuth的注冊(cè)、登錄、注銷和API調(diào)用

    這篇文章主要介紹了 Vue.js使用$.ajax和vue-resource實(shí)現(xiàn)OAuth的注冊(cè)、登錄、注銷和API調(diào)用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • 快速解決Error: error:0308010C:digital envelope routines::unsupported的三種解決方案

    快速解決Error: error:0308010C:digital envelope ro

    因?yàn)?nbsp;node.js V17版本中最近發(fā)布的OpenSSL3.0, 而OpenSSL3.0對(duì)允許算法和密鑰大小增加了嚴(yán)格的限制,下面通過(guò)本文給大家分享快速解決Error: error:0308010C:digital envelope routines::unsupported的三種解決方案,感興趣的朋友一起看看吧
    2024-02-02
  • vue項(xiàng)目使用定時(shí)器每隔幾秒運(yùn)行一次某方法代碼實(shí)例

    vue項(xiàng)目使用定時(shí)器每隔幾秒運(yùn)行一次某方法代碼實(shí)例

    有時(shí)候在項(xiàng)目中我們經(jīng)常需要設(shè)置簡(jiǎn)單的倒計(jì)時(shí)功能,這個(gè)可以通過(guò)定時(shí)器來(lái)實(shí)現(xiàn),下面這篇文章主要給大家介紹了關(guān)于vue項(xiàng)目使用定時(shí)器每隔幾秒運(yùn)行一次某方法的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • vue開(kāi)發(fā)移動(dòng)端h5環(huán)境搭建的全過(guò)程

    vue開(kāi)發(fā)移動(dòng)端h5環(huán)境搭建的全過(guò)程

    在正式使用Vue進(jìn)行移動(dòng)端頁(yè)面開(kāi)發(fā)前,需要做一些前置工作,下面這篇文章主要給大家介紹了關(guān)于vue開(kāi)發(fā)移動(dòng)端h5環(huán)境搭建的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • vue在body和query中如何向后端傳參

    vue在body和query中如何向后端傳參

    這篇文章主要介紹了vue在body和query中如何向后端傳參,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • Vue.JS項(xiàng)目中5個(gè)經(jīng)典Vuex插件

    Vue.JS項(xiàng)目中5個(gè)經(jīng)典Vuex插件

    在本文中,將向你展示5個(gè)特性,你可以通過(guò) Vuex 插件輕松地添加到下一個(gè)項(xiàng)目中。一起來(lái)學(xué)習(xí)下。
    2017-11-11

最新評(píng)論

万源市| 进贤县| 靖安县| 天全县| 光山县| 乐山市| 虎林市| 澄江县| 昂仁县| 东明县| 丽江市| 合阳县| 夏津县| 同仁县| 永泰县| 璧山县| 祁连县| 托里县| 武宣县| 凤台县| 青阳县| 寿宁县| 东丰县| 黄浦区| 山丹县| 孝义市| 安国市| 泗水县| 镇江市| 交城县| 巧家县| 襄汾县| 博白县| 清新县| 元江| 双牌县| 兴安盟| 库尔勒市| 兴宁市| 杭州市| 桂林市|