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

vue-router啟用history模式下的開發(fā)及非根目錄部署方法

 更新時間:2018年12月23日 11:23:55   作者:趙大仁  
這篇文章主要介紹了vue-router啟用history模式下的開發(fā)及非根目錄部署方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

 為什么要有 hash 和 history

對于 Vue 這類漸進(jìn)式前端開發(fā)框架,為了構(gòu)建 SPA(單頁面應(yīng)用),需要引入前端路由系統(tǒng),這也就是 Vue-Router 存在的意義。前端路由的核心,就在于 —— 改變視圖的同時不會向后端發(fā)出請求。

為了達(dá)到這一目的,瀏覽器當(dāng)前提供了以下兩種支持:

1.hash —— 即地址欄 URL 中的 # 符號(此 hash 不是密碼學(xué)里的散列運算)。

比如這個 URL:http://www.abc.com/#/hello,hash 的值為 #/hello。它的特點在于:hash 雖然出現(xiàn)在 URL 中,“#”后面的內(nèi)容不會被包括在 HTTP 請求中,對后端完全沒有影響,因此改變 hash 不會重新加載頁面。

2.history —— 利用了 HTML5 History Interface 中新增的 pushState() 和 replaceState() 方法。(需要特定瀏覽器支持)
這兩個方法應(yīng)用于瀏覽器的歷史記錄棧,在當(dāng)前已有的 back、forward、go 的基礎(chǔ)之上,它們提供了對歷史記錄進(jìn)行修改的功能。只是當(dāng)它們執(zhí)行修改時,雖然改變了當(dāng)前的 URL,但瀏覽器不會立即向后端發(fā)送請求。

因此可以說,hash 模式和 history 模式都屬于瀏覽器自身的特性,Vue-Router 只是利用了這兩個特性(通過調(diào)用瀏覽器提供的接口)來實現(xiàn)前端路由。

vue-router 的 history 模式是個提高顏值的好東西,沒有了 hash 的路由看起來清爽許多。

開發(fā)的時候,如果我們使用 devServer 來啟動服務(wù),由于一般不共用端口,我們一般不存在非根目錄的問題。

而刷新后 404 的問題可以借助 historyApiFallback 來解決。

但當(dāng)我們項目對外開放時,往往無法在域名根目錄下提供服務(wù),這個時候資源的訪問路徑與開發(fā)時的根目錄就有了區(qū)別。

首先,我們通過 webpack 來配置一下項目中所有資源的基礎(chǔ)路徑,讓這份代碼在開發(fā)和生產(chǎn)環(huán)境中都可以正確找到資源。

// config/index.js
module.exports = {
  dev: {
    ...
    // 開發(fā)環(huán)境根目錄 - 服務(wù)根目錄 - 絕對路徑
    assetsPublicPath: '/'
    ...
  },
  build: {
    ...
    // 生產(chǎn)環(huán)境根目錄 - 服務(wù)器訪問路徑 - 絕對路徑
    assetsPublicPath: '/test/project1/'
    ...
  }
}

 
// build/webpack.common.conf.js
const config = require('../config')
module.exports = {
  output: {
    publicPath: process.env.NODE_ENV === 'production'
      ? config.build.assetsPublicPath
      : config.dev.assetsPublicPath
  }
}

// build/webpack.dev.conf.js
const common = require('./webpack.common')
module.exports = merge(common, {
  devServer: {
    historyApiFallback: true
  }
}

然后在提供服務(wù)的服務(wù)器配置中做如下配置(以 nginx 為例):

location /test/project1 {
    alias .../project1; // 項目的真實路徑
    index index.html;
    try_files $uri $uri/ /test/project1/index.html;
}

try_files 會按順序檢查參數(shù)中的資源是否存在,并返回第一個找到的資源,如果都沒有找到,它會讓 nginx 內(nèi)部重定向到會后一個參數(shù)。

對了,所以它的的作用是解決刷新 404 的問題。

這里值得注意的是 try_files 的參數(shù)是絕對路徑。

至此,你開啟 history 模式的項目就可以順利的跑在任何路徑了。

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

相關(guān)文章

最新評論