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

webpack如何將vue3單頁面應(yīng)用改造成多頁面應(yīng)用

 更新時(shí)間:2023年05月23日 16:42:42   作者:自己瞎琢磨  
這篇文章主要介紹了webpack如何將vue3單頁面應(yīng)用改造成多頁面應(yīng)用,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

上篇文章搞了個(gè)單頁面vue,現(xiàn)在要將其改成多頁面,只是簡單嘗試,給了例子

其實(shí)也就是改個(gè)webpack的入口和html模版的配置,其他的話,每個(gè)頁面都有自己的vue和路由實(shí)例,pinia的話就共享吧

!important,這里是根據(jù)上篇文章配置的更改,更具體的配置可以參考上篇文章

一、改一下項(xiàng)目結(jié)構(gòu)

大概就是在src下新建一個(gè)pages目錄,然后再文件件下新建一個(gè)單頁面運(yùn)用,每個(gè)頁面都有自己的main.js和App.vue,此外還有自己的views和router,至于通用組件components和pinia文件夾就放在pages的目錄的同級(jí)區(qū)域,截圖如下:

這里我把index文件夾具體展開了,page1里面也是類似的結(jié)構(gòu),只不過page1當(dāng)中的index.js換成了page1.js,index.vue換成了page1.vue(實(shí)際上全寫成main.js和App.vue也沒啥事,我就是手欠)。每個(gè)page的配置其實(shí)類似vue-cli生成的單頁面運(yùn)用。( 忽略一下最下面的templates,那是存放html模板的地方)

二、更改webpack的配置

兩個(gè)部分,首先我們這里有兩個(gè)page,就有兩個(gè)入口文件

entry: {
        index: path.resolve(__dirname, './src/pages/index/index.js'),
        page1: path.resolve(__dirname, './src/pages/page1/page1.js')
    },
    output: {
        path: path.resolve(__dirname, 'dist'), // 打包出口
        filename: '[name].js', // 打包完的靜態(tài)資源文件名
        clean: true,//每次打包都會(huì)刪除dist里面舊的內(nèi)容
    },

注意和上篇比較,我這里的output的filename有些更改,這些配置不是最終的,最后還有優(yōu)化一下結(jié)構(gòu)

第二個(gè)則是html模板的改變,這里的話需要?jiǎng)?chuàng)建兩個(gè)模板

plugins: [
        new HtmlWebpackPlugin({
            template: path.resolve(__dirname, './templates/index.html'), // 我們要使用的 html 模板地址
            filename: 'index.html', // 打包后輸出的文件名
            title: 'index頁面',
            chunks: ["index"]
        }),
        new HtmlWebpackPlugin({
            template: path.resolve(__dirname, './templates/page1.html'), // 我們要使用的 html 模板地址
            filename: 'page1.html', // 打包后輸出的文件名
            title: 'page1頁面',
            chunks: ["page1"]
        }),
        new VueLoaderPlugin() //vue-loader插件
    ],

 這里有兩個(gè)htmlwebpackplugin的插件配置,每個(gè)配置對應(yīng)了一個(gè)頁面,兩個(gè)模板我也放在了pages同級(jí)的template文件夾之中,template文件夾如下:

 里面的模版都是一樣的,如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>
        <%= htmlWebpackPlugin.options.title %>
    </title>
</head>
<body>
    <div id="root"></div>
</body>

 就是body里面加了個(gè)id是root的格子,方便我們vue實(shí)例的掛載

另外要注意一下,我們兩個(gè)page的vue實(shí)例是公用的一個(gè)pinia例子,我不太確定能不能用,所以的話,測試了一下,大體就是創(chuàng)建了一個(gè)userInfor的pinia模塊,寫下如下的配置

import { defineStore } from 'pinia'
export const useUserStore = defineStore('user', {
    state: () => {
        return { userName: "黃烽" }
    },
    // 也可以這樣定義
    // state: () => ({ count: 0 })
    actions: {
        changeName () {
            this.userName = "gss"
        }
    },
})

在index頁面的views的Home.vue上進(jìn)行一下展示,這個(gè)頁面還有一個(gè)按鈕,觸發(fā)之后會(huì)觸發(fā)change函數(shù),將頁面導(dǎo)向page1.html

<template>
    <div class="msg">this msg is from page index
        <span>this is from span</span><br />
        <span>{{ "userName: " + user.userName }}</span>
        <button @click="change">跳轉(zhuǎn)</button>
    </div>
</template>
<script setup>
import { onMounted } from 'vue';
import { useUserStore } from "../../../pinia/userInfor.js"
const user = useUserStore()
const testFunction = (msg) => {
    alert(msg)
}
onMounted(() => {
    testFunction("hhhh")
})
const change = () => {
    window.location.href = "./page1.html"
}
</script>
<style scoped lang="scss">
.msg {
    color: red;
    span {
        color: green;
    }
}
</style>

對應(yīng)的page1當(dāng)中的Home.vue的配置如下

<template>
    <div class="msg">this msg is from page1
        <span>this is from span</span><br />
        <span>{{ "userName: " + user.userName }}</span>
        <button @click="change">改變用戶姓名</button>
    </div>
</template>
<script setup>
import { onMounted } from 'vue';
import { useUserStore } from "../../../pinia/userInfor.js"
const user = useUserStore()
const change = () => {
    user.changeName()
}
const testFunction = (msg) => {
    alert(msg)
}
onMounted(() => {
    testFunction("hhhh")
})
</script>
<style scoped lang="scss">
.msg {
    color: red;
    span {
        color: green;
    }
}
</style>

基本上是一樣的,除了msg內(nèi)容不同之外,就是這里的change函數(shù)測試的是pinia當(dāng)中的一個(gè)mutation。

最后一步就是打開dev 服務(wù)器測試,npm run dev,然后就行了,雖然有點(diǎn)簡單,但是基本的意思是有了 ,打包之后dist文件夾里就是這個(gè)樣子

三、結(jié)尾

其實(shí)還是比較簡單的,難的還是相關(guān)的優(yōu)化,我個(gè)人對優(yōu)化還是有些模糊的,有機(jī)會(huì)寫幾個(gè)優(yōu)化的例子。

到此這篇關(guān)于webpack將vue3單頁面應(yīng)用改造成多頁面應(yīng)用的文章就介紹到這了,更多相關(guān)vue單頁面應(yīng)用改造成多頁面應(yīng)用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Vite如何處理CSS預(yù)處理器

    詳解Vite如何處理CSS預(yù)處理器

    在現(xiàn)代前端開發(fā)中,CSS 預(yù)處理器如 Sass、Less 和 Stylus 等工具,為樣式編寫提供了更強(qiáng)大的功能和更好的開發(fā)體驗(yàn),本文將探討 Vite 是如何處理 CSS 預(yù)處理器的,以及如何在實(shí)際項(xiàng)目中配置和使用它們,需要的朋友可以參考下
    2025-02-02
  • ElementUI實(shí)現(xiàn)el-table行列合并的操作步驟

    ElementUI實(shí)現(xiàn)el-table行列合并的操作步驟

    在前端開發(fā)中,數(shù)據(jù)展示一直是一個(gè)重要的部分,而表格則是數(shù)據(jù)展示最常見的形式之一,ElementUI 是餓了么前端團(tuán)隊(duì)推出的一款基于 Vue 的 UI 組件庫,其中的 el-table 組件是一個(gè)功能強(qiáng)大且靈活的表格組件,今天我們要詳細(xì)探討的是 el-table 的行列合并操作
    2024-08-08
  • VUE 解決mode為history頁面為空白的問題

    VUE 解決mode為history頁面為空白的問題

    今天小編就為大家分享一篇VUE 解決mode為history頁面為空白的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • 詳解vue中的父子傳值雙向綁定及數(shù)據(jù)更新問題

    詳解vue中的父子傳值雙向綁定及數(shù)據(jù)更新問題

    這篇文章主要介紹了vue中的父子傳值雙向綁定及數(shù)據(jù)更新問題,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-06-06
  • vue小圖標(biāo)favicon不顯示的解決方案

    vue小圖標(biāo)favicon不顯示的解決方案

    本篇文章主要介紹了vue小圖標(biāo)favicon不顯示的解決方案,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-09-09
  • 在uni-app中使用element-ui的方法與報(bào)錯(cuò)解決

    在uni-app中使用element-ui的方法與報(bào)錯(cuò)解決

    我們在開web開發(fā)的時(shí)候,經(jīng)常會(huì)使用到element或者uview-ui,下面這篇文章主要給大家介紹了關(guān)于在uni-app中使用element-ui的方法與報(bào)錯(cuò)解決的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • Vuex入門學(xué)習(xí)之Getter詳解

    Vuex入門學(xué)習(xí)之Getter詳解

    這篇文章主要介紹了Vuex入門學(xué)習(xí)之Getter詳解,Vuex 允許我們在 store 中定義 getter(可以認(rèn)為是 store 的計(jì)算屬性),就像計(jì)算屬性一樣,getter 的返回值會(huì)根據(jù)它的依賴被緩存起來,且只有當(dāng)它的依賴值發(fā)生了改變才會(huì)被重新計(jì)算,需要的朋友可以參考下
    2023-11-11
  • 解決VueCil代理本地proxytable無效報(bào)錯(cuò)404的問題

    解決VueCil代理本地proxytable無效報(bào)錯(cuò)404的問題

    這篇文章主要介紹了解決VueCil代理本地proxytable無效報(bào)錯(cuò)404的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • Vue的v-model的幾種修飾符.lazy,.number和.trim的用法說明

    Vue的v-model的幾種修飾符.lazy,.number和.trim的用法說明

    這篇文章主要介紹了Vue的v-model的幾種修飾符.lazy,.number和.trim的用法說明,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • vue?批量自動(dòng)引入并注冊組件或路由實(shí)現(xiàn)詳解

    vue?批量自動(dòng)引入并注冊組件或路由實(shí)現(xiàn)詳解

    這篇文章主要為大家介紹了vue?批量自動(dòng)引入并注冊組件或路由實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07

最新評論

贵德县| 噶尔县| 永城市| 吉木萨尔县| 秀山| 嵊州市| 嘉祥县| 宁乡县| 白朗县| 玉溪市| 若羌县| 巴楚县| 黄平县| 南华县| 达州市| 邛崃市| 东阿县| 抚顺市| 扎囊县| 边坝县| 钦州市| 威海市| 南宫市| 炉霍县| 虎林市| 水富县| 白河县| 黄石市| 和顺县| 辰溪县| 大同市| 南阳市| 南木林县| 大邑县| 乡宁县| 安陆市| 山丹县| 柳河县| 阳江市| 天峻县| 彩票|