<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

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

        來源:懂視網 責編:小采 時間:2020-11-27 22:25:18
        文檔

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

        詳解如何將 Vue-cli 改造成支持多頁面的 history 模式:標題可能描述不準確, 大概就是這么個需求: 用 Vue-cli 搭建一個多入口, 多頁面的站點, 也就是通過html-webpack-plugin插件會生成多個 .html 文件, 在默認下, 是只有 index.html 這個入口可以用 history 模式, 如: http://www.xxx
        推薦度:
        導讀詳解如何將 Vue-cli 改造成支持多頁面的 history 模式:標題可能描述不準確, 大概就是這么個需求: 用 Vue-cli 搭建一個多入口, 多頁面的站點, 也就是通過html-webpack-plugin插件會生成多個 .html 文件, 在默認下, 是只有 index.html 這個入口可以用 history 模式, 如: http://www.xxx

        標題可能描述不準確, 大概就是這么個需求:

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

        真是太二了, 剛寫完文章就發現connect-history-api-fallback這個插件就是做這個的...

        方法更新如下:

        修改 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'}, // 默認入口
         { from: /\/backend/, to: '/backend.html'}, // 其他入口
         { from: /^\/backend\/.*$/, to: '/backend.html'},
         ]
        }))

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

        -------------- 以下代碼請無視 --------------

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

        1. 首先, 我們在 build 目錄下建立個 setup-dev-server.js 文件, 里面代碼如下:

        const path = require('path')
        const webpack = require('webpack')
        const clientConfig = require('./webpack.dev.conf') // 引入開發環境下的 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)
         // 關鍵代碼開始
         // 因為開發環境下, 所有的文件都在內存里, 包括由 html-webpack-plugin 生成的 .html 文件, 所以我們需要用 webpack-dev-middleware 提供的 api 從內存里讀取
         clientCompiler.plugin('done', () => {
         const fs = devMiddleware.fileSystem // 訪問內存
         const filePath = path.join(clientConfig.output.path, 'index.html') // 讀取的文件, 文件名和 html-webpack-plugin 生成的文件名要求一致
         if (fs.existsSync(filePath)) { // 判斷下文件是否存在
         const index = fs.readFileSync(filePath, 'utf-8') // 從內存里取出
         opts.indexUpdated(index) // 將取出的文件通過 indexUpdated 函數返回, 這個函數怎么來的, 后面會說明
         }
         const adminPath = path.join(clientConfig.output.path, 'backend.html') // 同上, 這是第二個入口生成的 .html 文件, 如果還有其他入口, 這個多復制幾份
         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)
         // 當修改 html-webpack-plugin 模版時, 自動刷新整個頁面
         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
        
        // 引用前面創建的文件, 并將兩個保存內容的函數傳過去, 這里保存內容的變量寫成對象或者數組也可以, 還可以少點代碼
        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))
        })
        // 設置靜態文件夾路由
        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 開始愉快的寫代碼吧

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

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

        詳解如何將 Vue-cli 改造成支持多頁面的 history 模式:標題可能描述不準確, 大概就是這么個需求: 用 Vue-cli 搭建一個多入口, 多頁面的站點, 也就是通過html-webpack-plugin插件會生成多個 .html 文件, 在默認下, 是只有 index.html 這個入口可以用 history 模式, 如: http://www.xxx
        推薦度:
        標簽: 模式 history vue-cli
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 日韩免费高清一级毛片在线| 国产猛男猛女超爽免费视频| 18禁无遮挡无码网站免费| 亚洲精品免费在线观看| 日韩免费高清大片在线| 亚洲欧洲在线观看| 亚洲黄色片免费看| 亚洲一区在线观看视频| 成人片黄网站A毛片免费| 亚洲国产日韩视频观看| 日韩人妻无码免费视频一区二区三区 | 亚洲AⅤ视频一区二区三区| 亚洲国产一区二区三区在线观看| 色播在线永久免费视频| 日本系列1页亚洲系列| 亚洲精品NV久久久久久久久久| 国产精品内射视频免费| 亚洲av综合色区| 很黄很黄的网站免费的| 久久久久亚洲AV无码去区首| 免费一看一级毛片全播放| 美女无遮挡拍拍拍免费视频| 亚洲综合久久成人69| 午夜一级免费视频| 中文字幕手机在线免费看电影| 久久久久久久久亚洲| 69成人免费视频无码专区| 男女啪啪免费体验区| 久久精品国产精品亚洲蜜月| 色播精品免费小视频| 无码毛片一区二区三区视频免费播放| 亚洲愉拍99热成人精品热久久| 67pao强力打造高清免费| 亚洲AV无码AV日韩AV网站| 国产亚洲精久久久久久无码| 曰批全过程免费视频在线观看 | 精品免费人成视频app| 亚洲一区二区三区高清在线观看| 亚洲国产日韩成人综合天堂 | 91精品啪在线观看国产线免费| 最新国产精品亚洲|