亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

詳解vue-cli3多頁應用改造

2019-11-19 11:24:15
字體:
來源:轉載
供稿:網友

需求

一個平臺P,包含產品a、b、c、d、e。各產品UI樣式風格統一,且會用到公共配置(HOST、是否添加埋點js)、組件(頭部導航、表格、搜索框)、方法(請求攔截、生成UUID)。

現狀:由于歷史遺留原因,各產品為獨立SPA、各自維護,配置、組件也都自成一體,只是大概樣式上保持了一致,但細節(比如同一面包屑樣式,左邊距5px、8px都有)都不一致。
這種情況下,改組件、改配置都得一改改多個地方,且有些項目是vue-cli2、有些是vue-cli3,項目間依賴包的版本也不一致,維護起來非常不友好。

目標:整合各產品單頁應用為MPA,提取公共文件(主題、配置、組件、方法),減少規范性東西的維護成本。

目錄結構對比

整合前

bds-bank-fe│  README.md││// 靜態資源輸出目錄│└───dist│  └───index.html + static // 平臺首頁│  └───label // 產品a│  │  └───index.html + static│  └───metrics // 產品b│  └───service // 產品c│  └───help // 產品d││// 項目路徑│└───help-center // 產品d└───portal-page // 平臺首頁└───service-doc // 產品c└───unify-label // 產品a└───unify-metrics // 產品b│  └───build│  └───config│  └───src

整合后

│// 靜態資源輸出目錄│└───dist│  └───index.html│  └───label.html│  └───metric.html│  └───service.html│  └───stocktake.html│  └───css│  └───js│  └───img├── public│  └───favicon.ico│  └───index.html││// 項目路徑│├── src│   └── assets│   └── components│   ├── pages│     ├── index│     ├── label│     ├── metric│     ├── service│     ├── stocktake

實現

vue-cli 3.0官方支持多頁,重點在于vue.config.js文件中pages這個配置項,每個頁面單獨配置entry、template、filename等。pages配置說明

// 官網示例如下module.exports = { pages: {  index: {   // page 的入口   entry: 'src/index/main.js',   // 模板來源   template: 'public/index.html',   // 在 dist/index.html 的輸出   filename: 'index.html',   // 當使用 title 選項時,   // template 中的 title 標簽需要是 <title><%= htmlWebpackPlugin.options.title %></title>   title: 'Index Page',   // 在這個頁面中包含的塊,默認情況下會包含   // 提取出來的通用 chunk 和 vendor chunk。   chunks: ['chunk-vendors', 'chunk-common', 'index']  },  // 當使用只有入口的字符串格式時,  // 模板會被推導為 `public/subpage.html`  // 并且如果找不到的話,就回退到 `public/index.html`。  // 輸出文件名會被推導為 `subpage.html`。  subpage: 'src/subpage/main.js' }}

Step1: 創建新項目

選擇需要的Babel、Router、Vuex、eslint...

具體步驟參考官網:創建一個項目

Step2: 修改配置文件vue.config.js

在根目錄下新建public文件夾,包含favicon.ico和index.html兩個文件。

index文件內容如下:

<!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 %>favicon.ico" rel="external nofollow" >  <title>P-公共服務平臺</title></head><body><noscript>  <strong>    We're sorry but page doesn't work properly without JavaScript enabled. Please enable it to continue.  </strong></noscript><div id="app"></div><!-- built files will be auto injected --></body></html>

然后,在根目錄下新建vue.config.js

const glob = require('glob')const path = require('path')const resolve = (dir) => path.join(__dirname, dir)const PAGES_PATH = './src/pages/*/*.js'module.exports = { pages: setPages(), // TODO:以下內容非生成多頁應用必須配置 lintOnSave: true, productionSourceMap: false, chainWebpack: config => {  /**   * 自動化導入文件   */  const types = ['vue-modules', 'vue', 'normal-modules', 'normal']  types.forEach(   type => addStyleResource(config.module.rule('less').oneOf(type)))  /**   * 添加別名   */  config.resolve.alias   .set('@index', resolve('src/pages/index'))   .set('@label', resolve('src/pages/label'))   .set('@metrics', resolve('src/pages/metric'))   .set('@service', resolve('src/pages/service'))   .set('@stocktake', resolve('src/pages/stocktake'))  /**   * 菜單icon處理為svg-sprite   */  config.module   .rule('svg')   .exclude   .add(resolve('src/assets/icons/menus'))   .end()  config.module   .rule('svg-sprite-loader')   .test(//.svg$/)   .include   .add(resolve('src/assets/icons/menus')) // 處理目錄   .end()   .use('svg-sprite-loader')   .loader('svg-sprite-loader')   .options({    symbolId: 'icon-[name]'   }) }}/** * 組裝頁面 */function setPages () { let pages = {} glob.sync(PAGES_PATH).forEach(filepath => {  let fileList = filepath.split('/')  let fileName = fileList[fileList.length - 2]  pages[fileName] = {   entry: filepath,   template: 'public/index.html',   filename: `${fileName}.html`,   // title:   chunks: ['chunk-vendors', 'chunk-common', fileName]  } }) return pages}/** * 注入公共less * @param rule */function addStyleResource (rule) { rule.use('style-resource')  .loader('style-resources-loader')  .options({   patterns: [    path.resolve(__dirname, 'src/assets/styles/variable.less')   ]  })}

Step3: 拷貝原項目src目錄至pages下,大概長這樣

Step4: 各產品原項目下package.json依賴包都挪到根目錄下package.json,重新安裝

PS:由于依賴向上升級,某些老版本依賴包可能會存在升級引發的問題,需要細心走查一遍。這里由于業務不一樣,就不詳細贅述了

然后npm start,完美啟動~

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品旅馆在线| 成人中文字幕+乱码+中文字幕| 亚洲永久在线观看| 国产性色av一区二区| 亚洲美女av网站| 亚洲视频一区二区| 久久91精品国产91久久久| 日韩久久午夜影院| 久久精品在线视频| 亚洲第一页在线| 日韩欧美亚洲一二三区| 国产欧美精品xxxx另类| 久久国产精品视频| 夜色77av精品影院| 91社区国产高清| 97精品国产97久久久久久免费| 国产欧美最新羞羞视频在线观看| 国产精品v日韩精品| 亚洲第一免费播放区| 2019亚洲男人天堂| 亚洲国产天堂久久国产91| 奇米影视亚洲狠狠色| 欧美一区视频在线| 欧美区在线播放| 在线观看成人黄色| 国产精品三级久久久久久电影| 国产亚洲激情视频在线| 91手机视频在线观看| 欧美精品制服第一页| 亚洲人成电影在线| 亚洲第一在线视频| 国产一区二区三区久久精品| 亚洲在线视频福利| 亚洲国产中文字幕久久网| 黑人巨大精品欧美一区免费视频| 91精品国产免费久久久久久| 亚洲的天堂在线中文字幕| 久久精品国产清自在天天线| 久久香蕉精品香蕉| 国产精品99蜜臀久久不卡二区| 亚洲国产成人精品久久| 国产精品第七十二页| 成人啪啪免费看| 亚洲成年人影院在线| 亚洲国产欧美一区二区三区同亚洲| 国产日韩在线视频| 欧美激情一二区| 精品久久香蕉国产线看观看gif| 国产一区二区三区久久精品| 国产成人久久久| 国产精品美女呻吟| 久久福利网址导航| 亚洲va久久久噜噜噜久久天堂| 久久久久久久电影一区| 亚洲另类激情图| 高潮白浆女日韩av免费看| 成人激情视频免费在线| 91久久嫩草影院一区二区| 伊人亚洲福利一区二区三区| 精品香蕉一区二区三区| 亚洲a在线播放| 91久久精品日日躁夜夜躁国产| 视频一区视频二区国产精品| 国产精品午夜国产小视频| 欧美亚州一区二区三区| www高清在线视频日韩欧美| 日韩高清av一区二区三区| 最新国产精品拍自在线播放| 国产精品福利在线观看| 欧美日韩亚洲91| 日韩久久免费电影| 国产一区二区三区在线播放免费观看| 日韩在线中文字幕| 国产精品高潮呻吟久久av黑人| 日韩欧美在线视频日韩欧美在线视频| 国产日产欧美精品| 成人黄色激情网| 91日韩在线播放| 国产精品久久婷婷六月丁香| 国产综合久久久久久| 成人黄色av免费在线观看| 日日骚av一区| 国产成人精品久久二区二区91| 国产亚洲精品久久久久动| 97色在线播放视频| 亚洲视频axxx| 久久久久国产精品免费网站| 成人av色在线观看| 日韩有码视频在线| 精品国产一区二区三区在线观看| 伊人精品在线观看| 久久av在线播放| 超碰97人人做人人爱少妇| 在线a欧美视频| 97视频网站入口| 69视频在线免费观看| 国产精品日日做人人爱| 日韩高清免费在线| 粗暴蹂躏中文一区二区三区| 国产精品中文字幕久久久| 久久夜色精品国产亚洲aⅴ| 精品欧美国产一区二区三区| 国产精品高潮呻吟久久av野狼| 欧美成年人网站| 日韩av网址在线| 97成人在线视频| 亚洲国产欧美一区二区三区同亚洲| 国产精品视频999| 精品欧美国产一区二区三区| 欧美性感美女h网站在线观看免费| 另类天堂视频在线观看| 久久久www成人免费精品张筱雨| 国产不卡一区二区在线播放| 97av视频在线| 亚洲国产成人精品久久久国产成人一区| 欧美黑人狂野猛交老妇| 92国产精品视频| 久久久999国产| 久久精品国产96久久久香蕉| 亚洲精品自拍偷拍| 亚洲国产成人久久综合| 日韩国产中文字幕| 欧美精品videossex性护士| 久久久国产精品x99av| 久久久久国产精品www| 久久精品成人欧美大片| 欧美性jizz18性欧美| 精品精品国产国产自在线| www.99久久热国产日韩欧美.com| 97婷婷大伊香蕉精品视频| 国产一区视频在线播放| 一本色道久久88综合日韩精品| 粗暴蹂躏中文一区二区三区| www.美女亚洲精品| 日韩av第一页| 韩国精品美女www爽爽爽视频| 亚洲最大激情中文字幕| 91黄色8090| 久久天天躁狠狠躁夜夜躁2014| 日韩av123| 久久精品一区中文字幕| 国产精品视频专区| 国产精品偷伦视频免费观看国产| 97久久超碰福利国产精品…| 国产精品视频久| 亚洲视频电影图片偷拍一区| 69**夜色精品国产69乱| 亚洲护士老师的毛茸茸最新章节| 色黄久久久久久| 91香蕉嫩草神马影院在线观看| 亚洲国产成人久久综合| 日韩欧美国产免费播放| 91精品久久久久久久久| 欧美日韩国产激情| 欧美裸身视频免费观看| 欧美性猛交xxxx黑人猛交| 欧美日韩中文字幕| 57pao精品| 青青草99啪国产免费| 久久精品99久久久久久久久| 亚洲天堂免费观看| 亚洲女同精品视频| 久久综合电影一区| 欧美交受高潮1|