前言
最近在開發(fā)跨境電商項(xiàng)目的時(shí)候,要做一個(gè)廣告宣傳頁,根據(jù)產(chǎn)品的要求希望廣告宣傳頁面在獨(dú)立域名下,但是領(lǐng)導(dǎo)又希望這個(gè)頁面在原有的項(xiàng)目內(nèi),于是就想起了用vue-cli多頁應(yīng)用。接下來就詳細(xì)介紹配置多頁應(yīng)用中遇到的坑和注意的細(xì)節(jié)。
step 一:首先看一下項(xiàng)目的主體架構(gòu),下邊講解不懂得可以參考這個(gè)目錄結(jié)構(gòu)

step 二:主要講解一下多頁應(yīng)用的主要配置
- 1,你可以使用原有的
main.js和App.vue作為主頁面的入口,原有的項(xiàng)目不需要?jiǎng)?/li> - 2,然后其他的多個(gè)頁面就需要自己創(chuàng)建了,在
src目錄下創(chuàng)建pages目錄下,然后新建advertisingPage目錄,這里邊就是你的第一個(gè)多頁的配置。
advertisingPage.js的配置如下,說白了就是你當(dāng)前新建的多頁的路由入口,類似于主頁的main.js注意:這里的
#advertisingPage就是下邊相對(duì)應(yīng)個(gè)vue文件的id,就跟app.vue中的id一樣,但是有時(shí)候粗心就會(huì)導(dǎo)致這個(gè)地方寫錯(cuò),所以要切記。
import Vue from "vue";
import advertisingPage from "./advertisingpage.vue";
import router from "../../router/adverTising.js";
import '@/assets/styles/index.scss'
Vue.config.productionTip = false;
new Vue({
router,
render: h => h(advertisingPage)
}).$mount("#advertisingPage");
advertisingPage.vue就是你多頁的入口文件,類似于主頁的App.vue文件這里需要注意的是,如果多個(gè)頁面的路由模式都用的是
history模式,那么(就目前我自己的配置情況)只有主頁<router-view />可以正常直接進(jìn)入路由,副頁面是不可以的,所以在這里我采用了引入組件的方式,不過可以點(diǎn)擊跳轉(zhuǎn)路由。但是
hash模式時(shí)正常的,目前history模式我還不知道怎么配置,不過還可以加載組件,然后在組建內(nèi)做點(diǎn)擊跳轉(zhuǎn)。肯定會(huì)有人說是因?yàn)槲衣酚衫镞厡懙腻e(cuò)誤,后邊會(huì)有我路由的詳細(xì)配置,一看便明白。
<template>
<div id="advertisingPage">
<!-- 注意:這個(gè)副頁面就是上邊所說的,直接用他進(jìn)路由是沒有效果的, -->
<!-- <router-view /> -->
<propaganda></propaganda>
</div>
</template>
<script>
import propaganda from "../../views/SeiteWerbung";
export default {
components: {
propaganda,
},
data() {
return {};
},
methods: {},
};
</script>
<style lang="scss" scoped>
</style>
- 3,主要的配置就是在
vue.config.js里邊
這里邊的pages目錄下就是配置的多頁的基本配置,需要幾個(gè)就配置幾個(gè),但是項(xiàng)目中要有配套的頁面,里邊都有詳細(xì)的注釋,注意看就好了
友情提示:這里進(jìn)入history模式刷新頁面404的小伙伴,請(qǐng)移步vue history模式刷新頁面進(jìn)入404解決方案
module.exports = {
publicPath: './', //部署項(xiàng)目的時(shí)候的基本url,替代原來的Baseurl,默認(rèn)是'/'
outputDir: 'dist', //運(yùn)行npm run build 時(shí)的打包文件夾
assetsDir: '', //放置生成的靜態(tài)資源 (js、css、img、fonts) 的 (相對(duì)于 outputDir 的) 目錄
indexPath: 'index.html', //指定生成的index.html輸出路徑
pages: {
advertisingPage: {
entry: "src/pages/advertisingPage/advertisingpage.js",
template: "public/advertisingPage.html",
filename: "advertisingPage.html",
title: "廣告宣傳頁面",
},
// homePage: {
// entry: "src/pages/homePage/homepage.js",
// template: "public/homePage.html",
// filename: "index.html",
// title: "裹小遞官網(wǎng)",
// },
index: {
// page 的入口
entry: 'src/main.js',
// 模板來源
template: 'public/index.html',
// 在 dist/index.html 的輸出
filename: 'index.html',
// 當(dāng)使用 title 選項(xiàng)時(shí),
// template 中的 title 標(biāo)簽需要是 <title><%= htmlWebpackPlugin.options.title %></title>
title: '裹小遞',
// 在這個(gè)頁面中包含的塊,默認(rèn)情況下會(huì)包含
// 提取出來的通用 chunk 和 vendor chunk。
chunks: ['chunk-vendors', 'chunk-common', 'index']
}
},
devServer: {
host: 'localhost', //請(qǐng)求路徑
port: '8080', //請(qǐng)求端口,當(dāng)同時(shí)運(yùn)行多個(gè)項(xiàng)目時(shí)就需要配置這個(gè)端口
https: false,
hotOnly: true, //是否熱更新
open: false, //是否自動(dòng)啟動(dòng)瀏覽器
// history模式下的url會(huì)請(qǐng)求到服務(wù)器端,但是服務(wù)器端并沒有這一個(gè)資源文件,就會(huì)返回404,所以需要配置這一項(xiàng)
historyApiFallback: {
index: '/index.html', //與output的publicPath有關(guān)(HTMLplugin生成的html默認(rèn)為index.html)
},
},
}
- 4,然后就是
public目錄下的文件了,主要就是跟多頁匹配的html頁面
advertisingPage.html頁面,這里主要注意的是里邊入口id要跟多頁應(yīng)用的入口文件的id匹配
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<!-- <link rel="icon" href="<%= BASE_URL %>logo.png"> -->
<!-- htmlWebpackPlugin.options.title 更改后的寫法,在相應(yīng)的vue.config.js中有說明 -->
<title><%= htmlWebpackPlugin.options.title %></title>
</head>
<body>
<noscript>
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled.
Please enable it to continue.</strong>
</noscript>
這里的id必須是`advertisingPage.vue`文件的容器的id,這里的內(nèi)容切記不要忘記
<div id="advertisingPage"></div>
<!-- built files will be auto injected -->
</body>
</html>
- 5,最后咋router/advertisingPage.js里邊配置對(duì)應(yīng)的多頁的路由
import Vue from "vue";
import VueRouter from "vue-router";
import home from "../views/advertising.vue";
Vue.use(VueRouter);
const routes = [{
path: "/",
name: "advertising",
component: advertising
},
];
這里的多頁的history模式,就是上邊所說的不能直接進(jìn)入`router-view`進(jìn)入跟路由,但是`hash`模式可以
const router = new VueRouter({
mode: "history",
base: process.env.BASE_URL,
routes
});
export default router;
step 三:運(yùn)行項(xiàng)目并訪問
- 1,訪問main.js的主頁面正常連接就可以訪問
- 2,訪問advertisingPage就需要在你的路徑后邊跟上
advertisingPage.html
http://localhost:8080/advertisingPage.html
就是這樣的路徑,這樣就可以訪問到多頁的那個(gè)副頁面的路由了。
- 3,同屬于一個(gè)單頁面內(nèi)的就可以正常使用vueRouter正常跳轉(zhuǎn),但是不屬于同于一個(gè)單頁內(nèi)的應(yīng)用的就需要用
window.location.href或者<a href="advertisingPage">secondview</a>來跳轉(zhuǎn)。 - 4,執(zhí)行
npm run build你就會(huì)在dist文件夾下發(fā)現(xiàn)多了你之前配置的多頁相匹配的html文件。
結(jié)束語
在配置多頁應(yīng)用的時(shí)候也是踩了好多坑,現(xiàn)在記錄下來,方便以后學(xué)習(xí)。