中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

vue-cli+webpack如何優化多頁面實例配置

發布時間:2021-07-22 15:45:09 來源:億速云 閱讀:105 作者:小新 欄目:web開發

這篇文章主要介紹了vue-cli+webpack如何優化多頁面實例配置,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

vue+webpack是否有多頁面

目前使用vue來做項目,估計大部分都是單頁面(SPA)應用,一個輕型的 MVVM 框架,誰用了MVVM框架,就再也回不去JQ時代了,哈哈。

在手機端的項目,使用vue + vue-router是high到爆,不僅僅是我們開發的而言,最主要的用戶體檢也是開足馬力,體檢感杠杠的。

那問題來了,使用vue+webpack的單頁面是爽到爆,那如果是多頁面也能不能high到爆呢?那當然呀,必須的必,vue、webpack的忠粉(哈哈,好像這忠粉不關系到多頁面的)。

在谷歌找vue 多頁面,實例還是比較少,功夫不負有心人,在yaoyao1987那找到了,具體可以到這個yaoyao1987 github,非常感謝yaoyao1987童鞋,今天要講的內容是基于yaoyao1987童鞋的多頁面實例上再優化的。

優化了點啥

github地址:https://github.com/bluefox1688/vue-cli-multi-page

優化的內容

我們先來講講,具體我們優化了什么內容。

  1. 增加全局統一使用的模塊Lib.js庫,可能這里看不明白,不要緊,后面會講到。

  2. 支持字體圖標

  3. 增加干凈的頁面、組件的模板,復制即可以使用。

  4. 去掉多余的代碼注釋,坑了我的注釋,別再坑人了

  5. 構建時,增加對css打包的支持

  6. 提取公共模塊........

使用方法

# 安裝
npm install

# 調試環境 serve with hot reload at http://localhost:8083/module/login.html
npm run dev

# 生產環境 build for production with minification
npm run build

本地默認訪問端口為8083,需要更改的童鞋請到項目根目錄文件config.js修改。

目錄結構

webpack
 |---build
  |---src
   |---assets 資源
     |---css.css css
     |---img 圖片文件
     |---font/ 字體圖標
   |---components 組件
      |---Button.vue 按鈕組件
     |---module-head.vue head組件
   |---module各個頁面模塊
    |---login  登陸模塊
     |---login.html
     |---login.js
     |---app.vue
    |---welcome    歡迎頁模塊
     |---welcome.html
     |---welcome.js
     |---app.vue

從目錄結構上,各種組件、頁面模塊、資源等都按類新建了文件夾,方便我們儲存文件。

其實我們所有的文件,最主要都是放在module文件夾里,以文件夾名為html的名稱。

例如

 |---login  登陸模塊
  |---login.html
  |---login.js
  |---app.vue

就是我們訪問時的地址:http://localhost:8083/module/login.html

這里一定要記住,在module里下級文件夾,一個文件夾就是一個html,jsvue template 都統一放在當前文件夾里,當然你也可以繼續放其他的資源,例如css、圖片等,webpack會打包到當前頁面里。

如果項目不需要這個頁面了,可以直接把這個文件夾直接刪除掉,干凈項目,干活也開心。

像以前我們傳統開發項目,所有的圖片都習慣放在images里,當項目有改動時,有些圖片等資源用不上了,但還占著坑位,雖

然現在的硬件容量大到驚人,但我們應該還是要養到一個良好的習慣。

當前頁面的開發在app.vue里,打開后你就會看到很熟悉的<template>、<script>、<style scoped>了。

全局統一公共模塊

我們做多頁面開發,那肯定會涉及到全局都能調用的公共庫,或者是把別人封裝的庫也一起打包在全局公共模塊里。

如果看過源碼的童鞋,在*.vue頁面里,我都統一import了一個文件

import Lib from 'assets/Lib.js'

這就是全局統一公共模塊,我們先看看Lib.js里的代碼

# 導入全局的css
import 'assets/css.css';
# 導入全局的站點配置文件
import C from 'assets/conf';
# 導入全局的共用事件
import M from 'assets/common';

var Rxports = {
  M,C
};

module.exports = Rxports

在上方代碼的M、C都是什么鬼,聰明的小伙伴就知道我想干嘛了,省寫少事唄。

例如我們現在想調用APP的名稱,在.vue里可以這么寫

import Lib from 'assets/Lib.js'
Lib.C.appname; # 藍鍋鍋

只需要在*.vue里導入import Lib from 'assets/Lib.js',就可以到處使用全局模塊了。

不再像傳統的開發模式,需要一堆的<script>一個一個的來放到頁面的底部。

傳統方式:

<script type='text/javascript' src='//g.alicdn.com/sj/lib/zepto/zepto.min.js' charset='utf-8'></script>
 <script type='text/javascript' src='//g.alicdn.com/msui/sm/0.6.2/js/sm.min.js' charset='utf-8'></script>
<script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>

這里就是我想講的關于優化的第一點提到的全局模塊庫。

當然也有童鞋問呀,會不會每個頁面都會把這些全局模塊庫都打包在當前頁面,那JS文件體積大到驚人。

哎呀,你當webpack是二貨的呀,webpack會自動幫你處理好的,會把在*.vue里的import Lib from 'assets/Lib.js'的庫自動提取出來,放到一個全局的JS文件里,這就是自動構造的神奇呀,省心省電,媽媽再也不用擔心我做重復的工作了。

Lib.js里,我們也看到有兩個導入的JS文件,主要來做什么的呢?

為了更好的在全局調用模塊里,知道哪個模塊的作用是什么,另外在寫代碼時更能快速查找到JS文件,我區分了配置文件和共用事件文件,即conf、common,下面說下具體的用途。

# 儲存站點的配置,例如web的名稱、LOGO地址等
import C from 'assets/conf';
# 導入全局的共用事件,例如在微信的JS SDK初始化,每個頁面都要分享,都需要初始化的,一次調用,全局使用,棒!!
import M from 'assets/common';

當然,你也可以不像這樣區分不同的JS文件,刪除也沒有影響的,具體也要看項目的需要而定,不能死讀書。

另外,如果想要干凈的頁面模塊模板,可以到根目錄的tpl里復制module_tpl整個文件夾,然后粘貼到src/module目錄下馬上就可以進行開發了,開發之前記得在cmdnpm run dev跑一遍,新增頁面都要重新dev一遍。

module我們就講到這里,下面我們來講講組件的調用,最愛組件了。

組件的使用

組件(Component)是 vue.js 最強大的功能之一,當你發現使用組件可以減少造輪子里,你會深深的愛上它。
我們的組件都是放在components目錄下的,調用組件的方法也很簡單。

import Button from 'components/Button';

然后記得在*.vue注冊導入的組件,要不然會影響使用。

import Button from 'components/Button';
export default {
 data() {
  return {
    
  }
 },
 components: {
  # 在這里注冊組件,不注冊組件的話,是無法使用的。
  Button  
 } 
}

如果想要干凈的組件模板,可以到根目錄的tpl里找到components_tpl的Hello.vue文件,復制粘貼到components目錄下馬上就可以進行開發了。

圖標字體

在yaoyao1987童鞋里,是沒有打包構造圖標字體的代碼邏輯,這也是我優化上去的一部分,建議使用iconfont圖標(http://www.iconfont.cn) ,強大到無所不能,可以到iconfont下載自己想要的圖標字體,記得是把文件放到\src\assets\font文件夾里。

webpack會自動打包的,無需理會,另外還有一點,iconfont提供的css文件,復制到\src\assets\css.css文件即可,要不然沒有效果哈。

*.vue里使用調用就行了。

<i class="iconfont">&#33</i>

構建代碼說明

那我們使用的是vue-cli的手腳架,用過vue+cli的朋友知道主要構建代碼都放在根目錄build下,vue多頁面主要修改了這三個JS文件webpack.base.conf.jswebpack.dev.conf.jswebpack.prod.conf.js

# 【webpack.base.conf.js】主要是構建的全局設置,主要是增加了以下代碼,已經增加在JS文件里,這里只是做一個補充說明,具體請看`build/webpack.base.conf.js`。

var entries = getEntry('./src/module/**/*.js'); // 獲得入口js文件
var chunks = Object.keys(entries);

plugins: [
  // 提取公共模塊
  new webpack.optimize.CommonsChunkPlugin({
   name: 'vendors', // 公共模塊的名稱
   chunks: chunks, // chunks是需要提取的模塊
   minChunks: chunks.length
  }),
  // 配置提取出的樣式文件
  new ExtractTextPlugin('css/[name].css')
 ]

function getEntry(globPath) {
 var entries = {},
  basename, tmp, pathname;

 glob.sync(globPath).forEach(function (entry) {
  basename = path.basename(entry, path.extname(entry));
  tmp = entry.split('/').splice(-3);
  pathname = tmp.splice(0, 1) + '/' + basename; // 正確輸出js和html的路徑
  entries[pathname] = entry;
 });
 
 return entries;
}

這里還要做一個特別說明,我們每次更新資源文件,為了去緩存,都會給文件生成hash值,例如:

<script type='text/javascript' src='vendors.61714a310523a3df9869.js' charset='utf-8'></script>
<script type='text/javascript' src='vendors.js?f3aaf25de220e214f84e' charset='utf-8'></script>

這兩者都是為了去緩存,唯一的區別的生成的文件名不一樣,有些項目,為了可以能出嚴重BUG時第一時間回滾,以文件名+hash的方式儲存,每次生成都不會覆蓋之前的代碼,以方便查BUG或者回滾。

另一種方式,就是以文件名+?hash的方式儲存,每次都會覆蓋之前生成的資源,方便在某些特殊項目使用。

我在webpack.base.conf.js也已經注釋說明了。

module.exports = {
 entry: entries,
 output: {
  path: config.build.assetsRoot,
  publicPath: config.build.assetsPublicPath,
  /* ---- 生成的例子 vendors.61714a310523a3df9869.js --- */
  //filename: '[name].[hash].js'
  /* ---- 生成的例子 vendors.js?f3aaf25de220e214f84e --- */
  filename: '[name].js'
 }
}

感謝你能夠認真閱讀完這篇文章,希望小編分享的“vue-cli+webpack如何優化多頁面實例配置”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

紫金县| 平陆县| 长葛市| 中西区| 寿阳县| 千阳县| 奉新县| 哈尔滨市| 北宁市| 台中市| 阳东县| 三河市| 延安市| 泗阳县| 靖远县| 新乡市| 定边县| 永定县| 黔江区| 布尔津县| 金寨县| 潍坊市| 汶上县| 中牟县| 济源市| 思南县| 肇庆市| 南部县| 南平市| 巢湖市| 繁峙县| 青龙| 灌阳县| 南通市| 景谷| 邻水| 舒兰市| 乐山市| 铁岭市| 崇阳县| 海晏县|