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

詳解如何將 Vue-cli 改造成支持多頁面的 history 模式

 更新時(shí)間:2017年11月20日 14:15:18   作者:M.M.F 小屋  
本篇文章主要介紹了詳解如何將 Vue-cli 改造成支持多頁面的 history 模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

標(biāo)題可能描述不準(zhǔn)確, 大概就是這么個(gè)需求:

用 Vue-cli 搭建一個(gè)多入口, 多頁面的站點(diǎn), 也就是通過html-webpack-plugin插件會(huì)生成多個(gè) .html 文件, 在默認(rèn)下, 是只有 index.html 這個(gè)入口可以用 history 模式, 如: http://www.xxx.com/xxx/xxx, 而其他的入口只能用 hash 模式, 如: http://www.xxx.com/admin.html#/xxx/xxx, 因?yàn)閣ebpack-dev-middleware會(huì)將所有的路由都指向 index.html 文件, 假如線上的時(shí)候, 都需要 history 模式, 這樣多少會(huì)造成麻煩.

真是太二了, 剛寫完文章就發(fā)現(xiàn)connect-history-api-fallback這個(gè)插件就是做這個(gè)的...

方法更新如下:

修改 build/dev-server.js 文件

app.use(require('connect-history-api-fallback')())

改成

var history = require('connect-history-api-fallback')
app.use(history({
  rewrites: [
    { from: 'index', to: '/index.html'}, // 默認(rèn)入口
    { from: /\/backend/, to: '/backend.html'}, // 其他入口
    { from: /^\/backend\/.*$/, to: '/backend.html'},
  ]
}))

具體規(guī)則就參考: https://github.com/bripkens/connect-history-api-fallback

-------------- 以下代碼請(qǐng)無視 --------------

下面我們就來改造下, 讓所有入口都支持 history 模式:

1. 首先, 我們?cè)?build 目錄下建立個(gè) setup-dev-server.js 文件, 里面代碼如下:

const path = require('path')
const webpack = require('webpack')
const clientConfig = require('./webpack.dev.conf') // 引入開發(fā)環(huán)境下的 webpack 配置文件

module.exports = function setupDevServer(app, opts) {
  const clientCompiler = webpack(clientConfig)
  // 加載 webpack-dev-middleware 插件
  const devMiddleware = require('webpack-dev-middleware')(clientCompiler, {
    publicPath: clientConfig.output.publicPath,
    stats: {
      colors: true,
      chunks: false
    }
  })
  app.use(devMiddleware)
  // 關(guān)鍵代碼開始
  // 因?yàn)殚_發(fā)環(huán)境下, 所有的文件都在內(nèi)存里, 包括由 html-webpack-plugin 生成的 .html 文件, 所以我們需要用 webpack-dev-middleware 提供的 api 從內(nèi)存里讀取
  clientCompiler.plugin('done', () => {
    const fs = devMiddleware.fileSystem // 訪問內(nèi)存
    const filePath = path.join(clientConfig.output.path, 'index.html') // 讀取的文件, 文件名和 html-webpack-plugin 生成的文件名要求一致
    if (fs.existsSync(filePath)) { // 判斷下文件是否存在
      const index = fs.readFileSync(filePath, 'utf-8') // 從內(nèi)存里取出
      opts.indexUpdated(index) // 將取出的文件通過 indexUpdated 函數(shù)返回, 這個(gè)函數(shù)怎么來的, 后面會(huì)說明
    }
    const adminPath = path.join(clientConfig.output.path, 'backend.html') // 同上, 這是第二個(gè)入口生成的 .html 文件, 如果還有其他入口, 這個(gè)多復(fù)制幾份
    if (fs.existsSync(adminPath)) {
      const admin = fs.readFileSync(adminPath, 'utf-8')
      opts.adminUpdated(admin)
    }
  })

  // 加載熱重載模塊
  app.use(require('webpack-hot-middleware')(clientCompiler))
  var hotMiddleware = require('webpack-hot-middleware')(clientCompiler)
  // 當(dāng)修改 html-webpack-plugin 模版時(shí), 自動(dòng)刷新整個(gè)頁面
  clientCompiler.plugin('compilation', function(compilation) {
    compilation.plugin('html-webpack-plugin-after-emit', function(data, cb) {
      hotMiddleware.publish({
        action: 'reload'
      })
      cb()
    })
  })
}

2. 修改 build/dev-server.js 文件

主要修改文件中var app = express()到module.exports = app.listen(port, function (err) {之間的代碼

var app = express()

var indexHTML
var adminHTML

// 引用前面創(chuàng)建的文件, 并將兩個(gè)保存內(nèi)容的函數(shù)傳過去, 這里保存內(nèi)容的變量寫成對(duì)象或者數(shù)組也可以, 還可以少點(diǎn)代碼
require('../config/setup-dev-server')(app, {
  indexUpdated: index => {
    indexHTML = index
  },
  adminUpdated: index => {
    adminHTML = index
  },
})

// 加載反向代理
Object.keys(proxyTable).forEach(function(context) {
  var options = proxyTable[context]
  if (typeof options === 'string') {
    options = {
      target: options
    }
  }
  app.use(proxyMiddleware(context, options))
})
// 設(shè)置靜態(tài)文件夾路由
var staticPath = path.posix.join(config.assetsPublicPath, config.assetsSubDirectory)
app.use(staticPath, express.static('./static'))

// 入口1路由
app.get(['/', '/category/:id'], (req, res) => {
  res.send(indexHTML)
})

// 入口2路由
app.get(['/backend', '/backend/*'], (req, res) => {
  res.send(adminHTML)
})

// 404 頁面
app.get('*', (req, res) => {
  res.send('HTTP STATUS: 404')
})

app.use(function(req, res, next) {
  var err = new Error('Not Found')
  err.status = 404
  next(err)
})

app.use(function(err, req, res) {
  res.status(err.status || 500)
  res.send(err.message)
})

module.exports = app.listen(port, function(err) {

3. npm run dev 開始愉快的寫代碼吧

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

相關(guān)文章

  • vue中@keyup.enter失效問題及解決

    vue中@keyup.enter失效問題及解決

    這篇文章主要介紹了vue中@keyup.enter失效問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Vue3如何處理異步任務(wù)輪詢

    Vue3如何處理異步任務(wù)輪詢

    在許多應(yīng)用程序中,我們經(jīng)常需要執(zhí)行定期的異步任務(wù)輪詢,本文就介紹了Vue3如何處理異步任務(wù)輪詢,感興趣的可以了解一下
    2023-05-05
  • vue中關(guān)于click.stop的用法

    vue中關(guān)于click.stop的用法

    這篇文章主要介紹了vue中關(guān)于click.stop的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Vue3中props傳參方式詳解

    Vue3中props傳參方式詳解

    這篇文章主要為大家詳細(xì)介紹了Vue3中props傳參方式(多種數(shù)據(jù)類型傳參方式)的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-11-11
  • vue中的數(shù)據(jù)格式化filters、formatter方式

    vue中的數(shù)據(jù)格式化filters、formatter方式

    這篇文章主要介紹了vue中的數(shù)據(jù)格式化filters、formatter方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • vue3.x項(xiàng)目中,出現(xiàn)紅色波浪線問題及解決

    vue3.x項(xiàng)目中,出現(xiàn)紅色波浪線問題及解決

    這篇文章主要介紹了vue3.x項(xiàng)目中,出現(xiàn)紅色波浪線問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • Vue頁面跳轉(zhuǎn)動(dòng)畫效果的實(shí)現(xiàn)方法

    Vue頁面跳轉(zhuǎn)動(dòng)畫效果的實(shí)現(xiàn)方法

    百度了好久都沒辦法實(shí)現(xiàn)vue中一個(gè)頁面跳到另一個(gè)頁面,甚至到google上搜索也是沒辦法的,最終還是找了高人親自指導(dǎo),所以下面這篇文章主要給大家介紹了關(guān)于Vue頁面跳轉(zhuǎn)動(dòng)畫效果的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2018-09-09
  • vue 根據(jù)選擇條件顯示指定參數(shù)的例子

    vue 根據(jù)選擇條件顯示指定參數(shù)的例子

    今天小編就為大家分享一篇vue 根據(jù)選擇條件顯示指定參數(shù)的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • vue配置文件實(shí)現(xiàn)代理v2版本的方法

    vue配置文件實(shí)現(xiàn)代理v2版本的方法

    這篇文章主要介紹了vue配置文件實(shí)現(xiàn)代理v2版本的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-06-06
  • Vue如何指定不編譯的文件夾和favicon.ico

    Vue如何指定不編譯的文件夾和favicon.ico

    這篇文章主要介紹了Vue如何指定不編譯的文件夾和favicon.ico,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04

最新評(píng)論

黔西| 靖江市| 年辖:市辖区| 伊金霍洛旗| 贡觉县| 寿阳县| 鹿泉市| 海晏县| 孟连| 怀安县| 财经| 会东县| 澄江县| 义乌市| 安平县| 万宁市| 绥棱县| 河北区| 阿坝县| 沅陵县| 航空| 宽甸| 呼伦贝尔市| 时尚| 柘城县| 隆化县| 陇川县| 确山县| 高平市| 长寿区| 桃园市| 浙江省| 绥阳县| 宿松县| 茂名市| 乌海市| 东莞市| 大方县| 德惠市| 昆山市| 信宜市|