欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue如何搭建多頁(yè)面多系統(tǒng)應(yīng)用

 更新時(shí)間:2020年06月17日 10:52:53   作者:yw00yw  
這篇文章主要為大家詳細(xì)介紹了vue搭建多頁(yè)面多系統(tǒng)應(yīng)用的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文為大家分享了vue如何搭建多頁(yè)面多系統(tǒng)應(yīng)用,供大家參考,具體內(nèi)容如下

一、多頁(yè)面多系統(tǒng)應(yīng)用

1、思路

使用Vue搭建多頁(yè)應(yīng)用。所有系統(tǒng)都在同一目錄下。配置多入口多出口。每個(gè)系統(tǒng)之間可以鏈接。每個(gè)系統(tǒng)內(nèi)依然采用Vue單頁(yè)應(yīng)用開(kāi)發(fā)。

2、組件復(fù)用性

可以將所有的系統(tǒng)公共組件放到系統(tǒng)目錄最外面,以達(dá)到組件復(fù)用。在系統(tǒng)內(nèi)部依然將自己獨(dú)立的組件封裝,復(fù)用。這樣可以最大限度的提高組件的復(fù)用性。

3、路由

每個(gè)系統(tǒng)單獨(dú)進(jìn)行路由配置

4、數(shù)據(jù)管理

每個(gè)系統(tǒng)數(shù)據(jù)倉(cāng)庫(kù)單獨(dú)處理

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

6、效果

在做Vue項(xiàng)目的時(shí)候,需要用對(duì)多個(gè)類似系統(tǒng)做一個(gè)集成。想過(guò)很多種方法,比如:完全單頁(yè)應(yīng)用,分開(kāi)獨(dú)立應(yīng)用,最終還是測(cè)試了一下多頁(yè)面開(kāi)發(fā)多系統(tǒng)。

準(zhǔn)備工作:

使用vue-cli搭建最基本的vue項(xiàng)目。

修改webpack配置:

在這一步里我們需要改動(dòng)的文件都在build文件下,分別是:

  • utils.js
  • webpack.base.conf.js
  • webpack.dev.conf.js
  • webpack.prod.conf.js
  • 我就按照順序放出完整的文件內(nèi)容,然后在做修改或添加的位置用注釋符標(biāo)注出來(lái)

utils.js

最最后添加如下代碼:

/* 這里是添加的部分 ---------------------------- 開(kāi)始 */

// glob是webpack安裝時(shí)依賴的一個(gè)第三方模塊,還模塊允許你使用 *等符號(hào), 例如lib/*.js就是獲取lib文件夾下的所有js后綴名的文件
var glob = require('glob')
 // 頁(yè)面模板
var HtmlWebpackPlugin = require('html-webpack-plugin')
 // 取得相應(yīng)的頁(yè)面路徑,因?yàn)橹暗呐渲?,所以是src文件夾下的pages文件夾
var PAGE_PATH = path.resolve(__dirname, '../src/system')
 // 用于做相應(yīng)的merge處理
var merge = require('webpack-merge')


//多入口配置
// 通過(guò)glob模塊讀取pages文件夾下的所有對(duì)應(yīng)文件夾下的js后綴文件,如果該文件存在
// 那么就作為入口處理
exports.entries = function() {
 var entryFiles = glob.sync(PAGE_PATH + '/*/*.js')
 var map = {}
 entryFiles.forEach((filePath) => {
  var filename = filePath.substring(filePath.lastIndexOf('\/') + 1, filePath.lastIndexOf('.'))
  map[filename] = filePath
 })
 return map
}

//多頁(yè)面輸出配置
// 與上面的多頁(yè)面入口配置相同,讀取pages文件夾下的對(duì)應(yīng)的html后綴文件,然后放入數(shù)組中
exports.htmlPlugin = function() {
  let entryHtml = glob.sync(PAGE_PATH + '/*/*.html')
  let arr = []
  entryHtml.forEach((filePath) => {
   let filename = filePath.substring(filePath.lastIndexOf('\/') + 1, filePath.lastIndexOf('.'))
   let conf = {
    // 模板來(lái)源
    template: filePath,
    // 文件名稱
    filename: filename + '.html',
    // 頁(yè)面模板需要加對(duì)應(yīng)的js腳本,如果不加這行則每個(gè)頁(yè)面都會(huì)引入所有的js腳本
    chunks: ['manifest', 'vendor', filename],
    inject: true
   }
   if (process.env.NODE_ENV === 'production') {
    conf = merge(conf, {
     minify: {
      removeComments: true,
      collapseWhitespace: true,
      removeAttributeQuotes: true
     },
     chunksSortMode: 'dependency'
    })
   }
   arr.push(new HtmlWebpackPlugin(conf))
  })
  return arr
 }
 /* 這里是添加的部分 ---------------------------- 結(jié)束 */

webpack.base.conf.js

module.exports = {
 context: path.resolve(__dirname, '../'),
 /* 修改部分 ---------------- 開(kāi)始 */
 entry: utils.entries(),
 /* 修改部分 ---------------- 結(jié)束 */
 output: {
  path: config.build.assetsRoot,
  filename: '[name].js',
  publicPath: process.env.NODE_ENV === 'production' ?
   config.build.assetsPublicPath : config.dev.assetsPublicPath
 }
 ...
 }

webpack.dev.conf.js

plugins: [
  new webpack.DefinePlugin({
   'process.env': require('../config/dev.env')
  }),
  new webpack.HotModuleReplacementPlugin(),
  new webpack.NamedModulesPlugin(), // HMR shows correct file names in console on update.
  new webpack.NoEmitOnErrorsPlugin(),
  // https://github.com/ampedandwired/html-webpack-plugin
  /* 注釋這個(gè)區(qū)域的文件 ------------- 開(kāi)始 */
  // new HtmlWebpackPlugin({
  // filename: 'index.html',
  // template: 'index.html',
  // inject: true
  // }),
  /* 注釋這個(gè)區(qū)域的文件 ------------- 結(jié)束 */
  // copy custom static assets
  new CopyWebpackPlugin([{
   from: path.resolve(__dirname, '../static'),
   to: config.dev.assetsSubDirectory,
   ignore: ['.*']
  }])

  /* 添加 .concat(utils.htmlPlugin()) ------------------ */
 ].concat(utils.htmlPlugin())

webpack.prod.conf.js

/* 注釋這個(gè)區(qū)域的內(nèi)容 ---------------------- 開(kāi)始 */
 // new HtmlWebpackPlugin({
 // filename: config.build.index,
 // template: 'index.html',
 // inject: true,
 // minify: {
 //  removeComments: true,
 //  collapseWhitespace: true,
 //  removeAttributeQuotes: true
 //  // more options:
 //  // https://github.com/kangax/html-minifier#options-quick-reference
 // },
 // // necessary to consistently work with multiple chunks via CommonsChunkPlugin
 // chunksSortMode: 'dependency'
 // }),
 /* 注釋這個(gè)區(qū)域的內(nèi)容 ---------------------- 結(jié)束 */

添加:

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

  • src就是我所使用的工程文件了,assets,components,system分別是靜態(tài)資源文件、組件文件、頁(yè)面文件。
  • 前兩個(gè)就不多說(shuō),主要是頁(yè)面文件里,我目前是按照項(xiàng)目的模塊分的文件夾,你也可以按照你自己的需求調(diào)整。然后在每個(gè)模塊里又有三個(gè)內(nèi)容:vue文件,js文件和html文件。這三個(gè)文件的作用就相當(dāng)于做spa單頁(yè)面應(yīng)用時(shí),根目錄的index.html頁(yè)面模板,src文件下的main.js和app.vue的功能。
  • 原先,入口文件只有一個(gè)main.js,但現(xiàn)在由于是多頁(yè)面,因此入口頁(yè)面多了,我目前就是兩個(gè):index和system2,之后如果打包,就會(huì)在dist文件下生成兩個(gè)HTML文件:index.html和system2.html(可以參考一下單頁(yè)面應(yīng)用時(shí),打包只會(huì)生成一個(gè)index.html,區(qū)別在這里)。

注意的地方

配置js時(shí)候:

import Vue from 'Vue'
import cell from './cell.vue'

/* eslint-disable no-new */
new Vue({
 el: '#app',
 render: h => h(cell)
})

頁(yè)面跳轉(zhuǎn):

可以寫(xiě)成: <a href='system2.html'></a>

打包后的資源路徑

├── dist
│   ├── js
│   ├── css
│   ├── index.html
│   └── system2.html

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

相關(guān)文章

  • vue?element-ui的el-input-number默認(rèn)值設(shè)置為空方法

    vue?element-ui的el-input-number默認(rèn)值設(shè)置為空方法

    這篇文章主要給大家介紹了關(guān)于vue?element-ui的el-input-number默認(rèn)值設(shè)置為空的相關(guān)資料,el-input-number組件是Element?UI非常常用的一個(gè)數(shù)字輸入框組件,它提供了默認(rèn)值設(shè)置的選項(xiàng),需要的朋友可以參考下
    2023-08-08
  • vue實(shí)現(xiàn)瀏覽器桌面通知的示例代碼

    vue實(shí)現(xiàn)瀏覽器桌面通知的示例代碼

    本文主要介紹了vue實(shí)現(xiàn)瀏覽器桌面通知的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • 淺談在Vue-cli里基于axios封裝復(fù)用請(qǐng)求

    淺談在Vue-cli里基于axios封裝復(fù)用請(qǐng)求

    這篇文章主要介紹了淺談在Vue-cli里基于axios封裝復(fù)用請(qǐng)求,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-11-11
  • Vue組件基礎(chǔ)操作介紹

    Vue組件基礎(chǔ)操作介紹

    這篇文章主要介紹了Vue組件基礎(chǔ)操作,組件是vue.js最強(qiáng)大的功能之一,而組件實(shí)例的作用域是相互獨(dú)立的,這就意味著不同組件之間的數(shù)據(jù)無(wú)法相互進(jìn)行直接的引用
    2023-01-01
  • vue-cli 目錄結(jié)構(gòu)詳細(xì)講解總結(jié)

    vue-cli 目錄結(jié)構(gòu)詳細(xì)講解總結(jié)

    這篇文章主要介紹了vue-cli 目錄結(jié)構(gòu)詳細(xì)講解總結(jié),詳細(xì)的介紹了整個(gè)項(xiàng)目的目錄以及目錄文件的用法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2019-01-01
  • elementui?el-upload一次請(qǐng)求上傳多個(gè)文件的實(shí)現(xiàn)

    elementui?el-upload一次請(qǐng)求上傳多個(gè)文件的實(shí)現(xiàn)

    使用ElementUI?Upload的時(shí)候發(fā)現(xiàn)如果是默認(rèn)方案,上傳多張圖片并不是真正的一次上傳多張,本文就來(lái)介紹一下elementui?el-upload一次請(qǐng)求上傳多個(gè)文件的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-10-10
  • Vue簡(jiǎn)化用戶查詢/添加功能的實(shí)現(xiàn)

    Vue簡(jiǎn)化用戶查詢/添加功能的實(shí)現(xiàn)

    本文主要介紹了Vue簡(jiǎn)化用戶查詢/添加功能的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • Vue3.2?setup語(yǔ)法糖及Hook函數(shù)基本使用

    Vue3.2?setup語(yǔ)法糖及Hook函數(shù)基本使用

    這篇文章主要為大家介紹了Vue3.2?setup語(yǔ)法糖及Hook函數(shù)基本使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • Vite打包性能優(yōu)化之開(kāi)啟Gzip壓縮實(shí)踐過(guò)程

    Vite打包性能優(yōu)化之開(kāi)啟Gzip壓縮實(shí)踐過(guò)程

    vue前端項(xiàng)目發(fā)布的時(shí)候,打包可實(shí)現(xiàn)gzip格式的壓縮,下面這篇文章主要給大家介紹了關(guān)于Vite打包性能優(yōu)化之開(kāi)啟Gzip壓縮的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • Vue如何使用ElementUI對(duì)表單元素進(jìn)行自定義校驗(yàn)及踩坑

    Vue如何使用ElementUI對(duì)表單元素進(jìn)行自定義校驗(yàn)及踩坑

    有一些驗(yàn)證不是通過(guò)input select這樣的受控組件來(lái)觸發(fā)驗(yàn)證條件的 ,可以通過(guò)自定義驗(yàn)證的方法來(lái)觸發(fā),下面這篇文章主要給大家介紹了關(guān)于Vue如何使用ElementUI對(duì)表單元素進(jìn)行自定義校驗(yàn)及踩坑的相關(guān)資料,需要的朋友可以參考下
    2023-02-02

最新評(píng)論