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

詳解vue-cli + webpack 多頁面實(shí)例配置優(yōu)化方法

 更新時(shí)間:2017年07月13日 15:45:45   作者:藍(lán)狐  
本篇文章主要介紹了詳解vue-cli + webpack 多頁面實(shí)例配置優(yōu)化方法,具有一定的參考價(jià)值,有興趣的可以了解一下

本文介紹了vue-cli + webpack 多頁面實(shí)例配置優(yōu)化方法,分享給大家

vue+webpack是否有多頁面

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

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

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

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

優(yōu)化了點(diǎn)啥

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

優(yōu)化的內(nèi)容

我們先來講講,具體我們優(yōu)化了什么內(nèi)容。

  1. 增加全局統(tǒng)一使用的模塊Lib.js庫(kù),可能這里看不明白,不要緊,后面會(huì)講到。
  2. 支持字體圖標(biāo)
  3. 增加干凈的頁面、組件的模板,復(fù)制即可以使用。
  4. 去掉多余的代碼注釋,坑了我的注釋,別再坑人了
  5. 構(gòu)建時(shí),增加對(duì)css打包的支持
  6. 提取公共模塊........

使用方法

# 安裝
npm install

# 調(diào)試環(huán)境 serve with hot reload at http://localhost:8083/module/login.html
npm run dev

# 生產(chǎn)環(huán)境 build for production with minification
npm run build

本地默認(rèn)訪問端口為8083,需要更改的童鞋請(qǐng)到項(xiàng)目根目錄文件config.js修改。

目錄結(jié)構(gòu)

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

從目錄結(jié)構(gòu)上,各種組件、頁面模塊、資源等都按類新建了文件夾,方便我們儲(chǔ)存文件。

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

例如

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

就是我們?cè)L問時(shí)的地址:http://localhost:8083/module/login.html

這里一定要記住,在module里下級(jí)文件夾,一個(gè)文件夾就是一個(gè)html,jsvue template 都統(tǒng)一放在當(dāng)前文件夾里,當(dāng)然你也可以繼續(xù)放其他的資源,例如css、圖片等,webpack會(huì)打包到當(dāng)前頁面里。

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

像以前我們傳統(tǒng)開發(fā)項(xiàng)目,所有的圖片都習(xí)慣放在images里,當(dāng)項(xiàng)目有改動(dòng)時(shí),有些圖片等資源用不上了,但還占著坑位,雖

然現(xiàn)在的硬件容量大到驚人,但我們應(yīng)該還是要養(yǎng)到一個(gè)良好的習(xí)慣。

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

全局統(tǒng)一公共模塊

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

如果看過源碼的童鞋,在*.vue頁面里,我都統(tǒng)一import了一個(gè)文件

import Lib from 'assets/Lib.js'

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

# 導(dǎo)入全局的css
import 'assets/css.css';
# 導(dǎo)入全局的站點(diǎn)配置文件
import C from 'assets/conf';
# 導(dǎo)入全局的共用事件
import M from 'assets/common';

var Rxports = {
  M,C
};

module.exports = Rxports

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

例如我們現(xiàn)在想調(diào)用APP的名稱,在.vue里可以這么寫

import Lib from 'assets/Lib.js'
Lib.C.appname; # 藍(lán)鍋鍋

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

不再像傳統(tǒng)的開發(fā)模式,需要一堆的<script>一個(gè)一個(gè)的來放到頁面的底部。

傳統(tǒng)方式:

<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>

這里就是我想講的關(guān)于優(yōu)化的第一點(diǎn)提到的全局模塊庫(kù)。

當(dāng)然也有童鞋問呀,會(huì)不會(huì)每個(gè)頁面都會(huì)把這些全局模塊庫(kù)都打包在當(dāng)前頁面,那JS文件體積大到驚人。

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

Lib.js里,我們也看到有兩個(gè)導(dǎo)入的JS文件,主要來做什么的呢?

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

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

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

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

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

組件的使用

組件(Component)是 vue.js 最強(qiáng)大的功能之一,當(dāng)你發(fā)現(xiàn)使用組件可以減少造輪子里,你會(huì)深深的愛上它。
我們的組件都是放在components目錄下的,調(diào)用組件的方法也很簡(jiǎn)單。

import Button from 'components/Button';

然后記得在*.vue注冊(cè)導(dǎo)入的組件,要不然會(huì)影響使用。

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

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

圖標(biāo)字體

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

webpack會(huì)自動(dòng)打包的,無需理會(huì),另外還有一點(diǎn),iconfont提供的css文件,復(fù)制到\src\assets\css.css文件即可,要不然沒有效果哈。

*.vue里使用調(diào)用就行了。

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

構(gòu)建代碼說明

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

# 【webpack.base.conf.js】主要是構(gòu)建的全局設(shè)置,主要是增加了以下代碼,已經(jīng)增加在JS文件里,這里只是做一個(gè)補(bǔ)充說明,具體請(qǐng)看`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;
}

這里還要做一個(gè)特別說明,我們每次更新資源文件,為了去緩存,都會(huì)給文件生成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>

這兩者都是為了去緩存,唯一的區(qū)別的生成的文件名不一樣,有些項(xiàng)目,為了可以能出嚴(yán)重BUG時(shí)第一時(shí)間回滾,以文件名+hash的方式儲(chǔ)存,每次生成都不會(huì)覆蓋之前的代碼,以方便查BUG或者回滾。

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

我在webpack.base.conf.js也已經(jīng)注釋說明了。

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'
 }
} 

結(jié)束言

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • VUE前端打包到測(cè)試環(huán)境的解決方法

    VUE前端打包到測(cè)試環(huán)境的解決方法

    這篇文章主要介紹了若依VUE前端打包到測(cè)試環(huán)境,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-12-12
  • 案例實(shí)操vue事件修飾符帶你快速了解與應(yīng)用

    案例實(shí)操vue事件修飾符帶你快速了解與應(yīng)用

    這篇文章主要介紹了vue常見的事件修飾符,在平時(shí)無論是面試還是學(xué)習(xí)工作中都會(huì)經(jīng)常遇到的,本文就帶你快速上手,需要的朋友可以參考下
    2023-03-03
  • Vue使用Axios庫(kù)請(qǐng)求數(shù)據(jù)時(shí)跨域問題的解決方法詳解

    Vue使用Axios庫(kù)請(qǐng)求數(shù)據(jù)時(shí)跨域問題的解決方法詳解

    在 VUE 項(xiàng)目開發(fā)時(shí),遇到個(gè)問題,正常設(shè)置使用 Axios 庫(kù)請(qǐng)求數(shù)據(jù)時(shí),報(bào)錯(cuò)提示跨域問題,那在生產(chǎn)壞境下,該去怎么解決呢?下面小編就來和大家詳細(xì)講講
    2024-01-01
  • vue?el-input設(shè)置必填提示功能(單個(gè)與多個(gè))

    vue?el-input設(shè)置必填提示功能(單個(gè)與多個(gè))

    有的功能需要設(shè)置必填項(xiàng),當(dāng)然也需要判斷是不是添上了,下面這篇文章主要給大家介紹了關(guān)于vue?el-input設(shè)置必填提示功能(單個(gè)與多個(gè))的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • 使用Element進(jìn)行前端開發(fā)的詳細(xì)圖文教程

    使用Element進(jìn)行前端開發(fā)的詳細(xì)圖文教程

    眾所周知Element是一套Vue.js后臺(tái)組件庫(kù),它能夠幫助你更輕松更快速地開發(fā)后臺(tái)項(xiàng)目,下面這篇文章主要給大家介紹了關(guān)于使用Element進(jìn)行前端開發(fā)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • vue中使用ts配置的具體步驟

    vue中使用ts配置的具體步驟

    這篇文章主要介紹了vue中使用ts配置的具體步驟,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 少女風(fēng)vue組件庫(kù)的制作全過程

    少女風(fēng)vue組件庫(kù)的制作全過程

    這篇文章主要給大家介紹了關(guān)于少女風(fēng)vue組件庫(kù)的制作全過程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用vue具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • vue中的ElementUI的使用詳解

    vue中的ElementUI的使用詳解

    本文通過實(shí)例代碼給大家介紹了vue中的ElementUI的使用,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-10-10
  • vue3?setup語法糖之組件傳參(defineProps、defineEmits、defineExpose)示例詳解

    vue3?setup語法糖之組件傳參(defineProps、defineEmits、defineExpose)示例詳

    defineProps?和?defineEmits?都是只能在?<script?setup>?中使用的編譯器宏,他們不需要導(dǎo)入,且會(huì)隨著?<script?setup>?的處理過程一同被編譯掉,這篇文章主要介紹了vue3?setup語法糖之組件傳參(defineProps、defineEmits、defineExpose)示例詳解,需要的朋友可以參考下
    2023-01-01
  • vue.js2.0點(diǎn)擊獲取自己的屬性和jquery方法

    vue.js2.0點(diǎn)擊獲取自己的屬性和jquery方法

    下面小編就為大家分享一篇vue.js2.0點(diǎn)擊獲取自己的屬性和jquery方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-02-02

最新評(píng)論

美姑县| 克什克腾旗| 伊宁市| 东乡族自治县| 隆尧县| 横峰县| 沐川县| 固原市| 克什克腾旗| 旺苍县| 加查县| 错那县| 武汉市| 潼南县| 澄江县| 巫溪县| 锦州市| 苏尼特左旗| 龙州县| 潢川县| 辽宁省| 佛教| 眉山市| 故城县| 兰州市| 金堂县| 汶上县| 收藏| 吉水县| 芷江| 施甸县| 彰化县| 桃源县| 会宁县| 北海市| 山东| 丰镇市| 崇阳县| 和平区| 松原市| 五常市|