国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

vue項目添加多頁面配置的步驟詳解

來源:懂視網 責編:小采 時間:2020-11-27 21:56:29
文檔

vue項目添加多頁面配置的步驟詳解

vue項目添加多頁面配置的步驟詳解:公司使用 vue-cli 創建的 vue項目 在初始化時并沒有做多頁面配置,隨著需求的不斷增加,發現有必要使用多頁面配置??戳撕芏?vue多頁面配置 的文章,基本都是在初始化時就配置了多頁面。而且如果使用這些實現,需要調整當前項目的目錄結構,這點也是不能接受
推薦度:
導讀vue項目添加多頁面配置的步驟詳解:公司使用 vue-cli 創建的 vue項目 在初始化時并沒有做多頁面配置,隨著需求的不斷增加,發現有必要使用多頁面配置。看了很多 vue多頁面配置 的文章,基本都是在初始化時就配置了多頁面。而且如果使用這些實現,需要調整當前項目的目錄結構,這點也是不能接受

公司使用 vue-cli 創建的 vue項目 在初始化時并沒有做多頁面配置,隨著需求的不斷增加,發現有必要使用多頁面配置??戳撕芏?vue多頁面配置 的文章,基本都是在初始化時就配置了多頁面。而且如果使用這些實現,需要調整當前項目的目錄結構,這點也是不能接受的。

最后,參考這些文章,在不調整當前項目目錄結構實現了多頁面的配置的添加。這里做下記錄、總結,方便以后復用。如果還能有幸幫助到有同樣需求的童鞋的話,那就更好了。

實現步驟

1.添加新增入口相關文件;
2.使用變量維護多入口;
3.開發環境讀取多入口配置;
4.生產環境讀取多入口配置;

新增入口相關文件

在 src 目錄下新增一個 page1 文件夾,新建新頁面的所需的相關文件(入口文件、HTML模板文件等)。我這邊直接 vue-cli 初始化創建相關文件復制了一份到 page1 文件夾下。如下:

├─App.vue
├─main.js
├─page1.html // 這里模板文件名稱需要與文件夾名稱相同,方便
輸出模板讀取 ├─router | └index.js ├─components | └HelloWorld.vue ├─assets | └logo.png page1/router/index.js 需要對該頁面的所有路由添加同文件夾名的公共路徑,用于解析: import Vue from 'vue' import Router from 'vue-router' import HelloWorld from '@/page1/components/HelloWorld' // 這里也需要留意 Vue.use(Router) export default new Router({ mode: 'history', base: '/', routes: [ { path: '/page1/', redirect: '/page1/index' }, { path: '/page1/index', name: 'HelloWorld', component: HelloWorld } ] })

使用變量維護多入口

我們在項目目錄下的 build/utils.js 的最后 exports 一個指定多入口的對象。如下:

// 這里,每個屬性就是一個頁面配置,指定該頁面的入口文件
// 如果需要添加,只需多增加一個屬性
// 屬性名必和html模板文件名、目錄名稱相同
exports.multipleEntrys = {
 page1: './src/page1/main.js'
}

之所以使用 build/utils.js ,是因為該文件在 webpack.base.conf.js 、 webpack.prod.conf.js 、 webpack.dev.conf.js 都用導入。

開發環境讀取多入口配置

首先,在 build/webpack.base.conf.js 中,我們把上面定義的入口添加進 entry 配置:

entry: {
 app: './src/main.js',
 ...utils.multipleEntrys // entry添加該行
 }

然后,在 build/webpack.dev.conf.js 添加路徑解析和多頁面輸出:

// 添加解析,將historyApiFallback的屬性修改如下:
 historyApiFallback: {
 rewrites: [
 // 將所有多入口遍歷成路徑解析項
 ...((()=>{
 let writes = []
 for(let prop in utils.multipleEntrys){
 // 使用屬性名匹配為正則
 // 這就是上面“需要對該頁面的所有路由添加同文件夾名的公共路徑”的原因
 let reg = new RegExp(`^/${prop}/`) 
 writes.push({
 from: reg,
 // 使用屬性名讀取模板文件
 // 這就是上面“模板文件名稱需要與文件夾名稱相同”的原因
 to: path.posix.join(config.dev.assetsPublicPath, `${prop}.html`)
 })
 }
 return writes
 })()),
 // 匹配所有路徑一定要在最后,否則該匹配之后的項,不會被執行
 { from: /.*/, to: path.posix.join(config.dev.assetsPublicPath, 'index.html') } 
 ],
 }
// 在已經的HtmlWebpackPlugin中添加chunks配置,否則默認頁面會注入所有頁面的js文件
...
plugins: [
 ...
 new HtmlWebpackPlugin({
 filename: 'index.html',
 template: 'index.html',
 inject: true,
 // 增加此行,
 // 'app'為默認入口名稱,如果你的默認入口不是'app'
 // 則這里需要替換
 chunks: ['manifest', 'vendor', 'app']
 })
 ...
]
...
// 在`devWebpackConfig`定義之后,緊接著添加多頁面
輸出: for(let prop in utils.multipleEntrys){ devWebpackConfig.plugins.push(new HtmlWebpackPlugin({ filename: `${prop}.html`, // html模板路徑,使用屬性名作為文件夾名稱 // 這是新頁面文件夾名稱需要和多入口配置變量屬性名相同的原因 template: `./src/${prop}/${prop}.html`, inject: true, chunks: ['manifest', 'vendor', prop], })) }

最后,添加多頁面相互跳轉鏈接:

<!-- src/components/HelloWorld.vue -->
...
<a href="/page1/index" rel="external nofollow" >to page B</a> 
...

<!-- src/page1/components/HelloWorld.vue -->
...
<a href="/" rel="external nofollow" >to page A</a> 
...
<!-- 這里由于是多個頁面的跳轉,所以不能再使用router-link標簽,需要使用a標簽 -->

到這里,開發環境的多頁面配置已經完成,重新 npm run dev 一下,即可多頁面跳轉。

生產環境讀取多入口配置

首先,在 webapck.prod.config.js 中添加多頁面輸出。

// 在已經的HtmlWebpackPlugin中添加chunks配置,否則默認頁面會注入所有頁面的js文件
...
plugins: [
 ...
 new HtmlWebpackPlugin({
 ...
 chunks: ['manifest', 'vendor', 'app'] // 增加此行
 ...
 })
 ...
]
...
// build/webapck.prod.config.js的webpackConfig定義后緊接著添加
for(let prop in utils.multipleEntrys){
 webpackConfig.plugins.push(new HtmlWebpackPlugin({
 filename: `${prop}.html`,
 template: `./src/${prop}/${prop}.html`,
 inject: true,
 chunks: ['manifest', 'vendor', prop],
 minify: {
 removeComments: true,
 collapseWhitespace: true,
 removeAttributeQuotes: true
 },
 chunksSortMode: 'dependency'
 }))
}

然后,開發環境不同路徑指向不同輸出文件是由 historyApiFallback 來處理的,生產就需要在 web服務 中將不同路徑指向打包后的不同文件。這里以 nginx 為例,配置如下:

server {
 listen 92 default_server;
 listen [::]:92 default_server;
 server_name _;
 root D:\vue-multi-entry\dist;
 location / {
 try_files $uri $uri/ /index.html;
 }
 location /page1/ {
 try_files $uri $uri/ /page1.html;
 }
}

以上,整個多頁面的配置就已經完成。這里是 完整demo

關于webpack4.x版本的差異

如果你使用的是 webpack4.x 版本,關于 webapck.prod.config.js 中 chunks 配置的順序就是這樣的: [prop, 'manifest', 'vendor'] 。

總結

以上所述是小編給大家介紹的vue項目添加多頁面配置的步驟詳解,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

vue項目添加多頁面配置的步驟詳解

vue項目添加多頁面配置的步驟詳解:公司使用 vue-cli 創建的 vue項目 在初始化時并沒有做多頁面配置,隨著需求的不斷增加,發現有必要使用多頁面配置??戳撕芏?vue多頁面配置 的文章,基本都是在初始化時就配置了多頁面。而且如果使用這些實現,需要調整當前項目的目錄結構,這點也是不能接受
推薦度:
標簽: 方法 VUE 教程
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 日韩国产欧美一区二区三区在线 | 91在线一区二区三区 | 国产精品成人一区二区三区 | 欧美日韩另类综合 | 日本a v 黄 | 九草伊人| 国产高清美女一级a毛片 | 欧美日韩一二区 | 影音先锋亚洲综合小说在线 | 欧美91精品 | 精品二区| 免费黄a | 亚洲一区中文 | 五月天婷婷在线观看 | 干比网| 国产成a人片在线观看视频下载 | 中文字幕在线视频精品 | 精品一区二区三区免费视频 | 日韩一区二区免费视频 | 亚洲欧美日韩国产色另类 | 亚洲专区欧美专区 | 欧洲亚洲一区 | 草逼视频免费看 | 免费国产线观看免费观看 | 欧美成人精品高清在线播放 | 日韩第一页在线 | 精品国产高清自在线一区二区三区 | 欧美国产日韩在线 | 97精品国产91久久久久久 | 精品国产免费人成在线观看 | 国产欧美日韩另类va在线 | 国产女同一区二区三区五区 | 精品一区二区三区五区六区七区 | 欧美高清在线精品一区二区不卡 | 国产在线精品一区二区夜色 | 麻豆一区| 一区二区三区四区电影 | 日韩欧美高清在线 | 欧美日韩一二 | 日韩欧美视频一区二区三区 | 欧美va免费精品高清在线 |