1. 程式人生 > >h5學習筆記:vue 路由部署伺服器子目錄問題

h5學習筆記:vue 路由部署伺服器子目錄問題

《Egret 引擎入門》
這兩天一直在查詢vue經過打包後部署伺服器一直顯示不出來的問題。前端沒有報錯,資源載入也很正常。找了很多回答,最後定位在vue的訪問路由出了問題。

出現的現象

前端vuejs+vue-router+webpack的組合,打包是由webpack打包出來,在本地除錯的時候正常,但是在伺服器xampp裡面怎樣也出不了UI,也沒有報錯。

由於前端採取了vuejs的路由訪問,在webpack配合開發的時候,訪問的路徑一直是

   localhost:8080

也就是說,我們伺服器訪問的路徑是根目錄下,然而打包後的靜態檔案,我們放置的並不是根目錄 這個時候就出現各種訪問不到的情況出現了。

這是由於在webpack打包的時候默認了在根目錄下。注意這裡,assetsPublicPath: ‘/’,,專案中config/index.js下是webpack的配置。這個配置一個是釋出版本,一個是開發除錯版本。

當我們 運行了 npm run build的時候,這個時候路由就默認了在根目錄了。

 build: {
    env: require('./prod.env'),
    index: path.resolve(__dirname, '../dist/index.html'),
    assetsRoot: path.resolve(__dirname, '../dist'),
    assetsSubDirectory
: 'static', assetsPublicPath: '/', productionSourceMap: true, // Gzip off by default as many popular static hosts such as // Surge or Netlify already gzip all static assets for you. // Before setting to `true`, make sure to: // npm install --save-dev compression-webpack-plugin productionGzip
: false, productionGzipExtensions: ['js', 'css'], // Run the build command with an extra argument to // View the bundle analyzer report after build finishes: // `npm run build --report` // Set to `true` or `false` to always turn it on or off bundleAnalyzerRep

我們再看看main.js 這個檔案,配置了路由的時候,指定了base的時候,訪問路由目錄也是預設根目錄,當我們希望更改到子目錄的時候,就對base進行修改一下,例如我們的目錄是’/vuethink/’,則base就變成如下情況。

  base: '/vuethink/',
const router = new VueRouter({
  mode: 'history',
  base: __dirname,
  routes
})

修改完成後,再次打包後可以順利訪問到。

部署伺服器子目錄需要修改路由設定

1.修改VueRouter的base設定
2.在config/index.js下修改build的assetsPublicPath: ‘/’, 修改對應的子目錄。

例如:127.0.0.1/vuethink/
我們的目錄就修改成base

base: ‘/vuethink/’ ,  //main.js處修改路由
assetsPublicPath:'vuethink' //config/index.js 修改專案打包為子目錄

下面為配置在vuethinkphp的截圖,使用的伺服器工具xampp,放置在
htdocs\vuethink 目錄下。
這裡寫圖片描述

這裡寫圖片描述

配置vuethinkphp

下載到的前後端並不能馬上使用,需要對資料庫進行調整到自己適合的。

第一步,修改config/ database.php,這裡填寫資料庫的配置,修改資料庫名,使用者名稱 和 密碼,埠。在我本機的使用者為root,密碼為空,埠為3306,資料庫我建立一個thinkphp5的標記。

   'type'           => 'mysql',
    // 伺服器地址
    'hostname'       => '127.0.0.1',
    // 資料庫名
    'database'       => 'thinkphp5',
    // 使用者名稱
    'username'       => 'root',
    // 密碼
    'password'       => '',
    // 埠
    'hostport'       => '3306',

將install.sql,安裝到資料庫中去。使用Navicat for MySQL 等工具先建立一個名為thinkphp5的資料庫,然後通過右鍵執行sql檔案,指向install.sql檔案,完成後可以看到我們的資料庫表已經安裝到了。

這裡寫圖片描述

出現vuethink介面字眼 則代表成功了。實際上這個路由缺失(miss的)的情況下出現的,這個時候對應好路由請求,這個介面字眼就不會出現的。部署過程僅僅是告知你聯通了

第二步:前端需要安裝package.json的庫。由於vuethinkphp下載後,框架沒有對應好依賴庫,因此需要使用命令列 npm install 進行安裝。安裝過程會很慢,需要耐心等待。

安裝成功後,在專案目錄下執行npm run dev 這個時候會彈出一個網頁,localhost:8080 這個時候,前端路由剛好指向了我們的登入頁面

這裡寫圖片描述

所以當運行了http://localhost:8080 的時候,路由第一項是指向了Login的登入頁面。這個時候,輸入admin 密碼 123456 則可以進入到後臺了。

當我們需要打包部署到在XAMPP 的 htdocs\vuethink 子目錄下,這個時候,就需要對上述的路由調整一下。

打包後文件是靜態的html,不能直接執行,需要放置在自定的伺服器目錄。由於我們部署是子目錄,因此對其恰當調整一下才能正確執行到路由。
好了,這個坑暫時過了。

eslint 瘋狂報錯

由於vuethink採用了eslint嚴格的機制,所以你的程式碼一旦不按照這個機制寫格式,例如你寫雙引號,空格不按照對齊。這個時候就會報錯,報錯。

如果不需要這個嚴格的驗證機制,那麼你可以在這個機制上取消這個驗證。開啟
webpack.base.conf.js 的js

註解一下這個配置。不讓eslint給你添麻煩。

 eslint: {
    // configFile: './.eslintrc.json'
  },
  module: {
    preLoaders: [
      // {
      //   test: /\.js$/,
      //   exclude: /node_modules/,
      //   loader: 'eslint'
      // },
      // {
      //   test: /\.vue$/,
      //   exclude: /node_modules/,
      //   loader: 'eslint'
      // }
    ],