本文主要解決:
1、vue-cli預設配置打包後部署至特定路徑下靜態資源路徑錯誤問題;
2、靜態資源打包使用相對路徑後css檔案引入路徑錯誤問題。
一、問題
vue-cli 腳手架生成的預設打包配置檔案情況下執行 npm run build 打包後,部署專案至特定路徑下:如://ip:port/public/springactivity/
此時訪問:http://ip:port/public/springactivity/index.html
index.html 可以正常訪問,但是引用的js,css等檔案伺服器響應均為404,檢視引入的資源路徑如下:
二、分析
由上可以看出是資源打包路徑有誤,打包後的資源使用了絕對根目錄路徑,因此將專案部署到特定目錄下,其引入的資源路徑無法被正確解析。
三、解決
在打包時需要使用相對路徑來處理靜態資源,更改build中資源發布路徑配置(config/index.js, build物件):
將 assetspublicpath: '/' 改為 assetspublicpath: './',再次打包,並將資源部署到特定路徑下,然後訪問,此時index.html可以正常訪問,同時js和css資源也可以正常訪問,但是css中引入的assets目錄下的大資源出錯了(服務端404)
四、再分析
檢視引入的資源路徑如下:http://ip:port/public/springactivity/static/css/static/img/question_bg.61a2825.png
實際專案中資源路徑如下:
index.html很明顯引入路徑有誤。分析引入路徑,發現路徑均多了"/static/css"兩層目錄,static/
|--js/
|--*.js
|--css/
|--*.css
|--img/
|--*.png
猜測是css目錄下的css檔案引入路徑為"/static/img/question_bg.61a2825.png" ,
檢視css檔案,css中引入路徑如下:background:url(static/img/question_bg.61a2825.png)
五、再解決
首先將options.extract設為false,關閉抽離css功能,再次打包並部署至特定目錄,訪問:http://ip:port/public/springactivity/index.html,頁面正常顯示,大功即將告成。
因此使用extracttextplugin外掛程式時還需要配置靜態資源路徑引數,通過查詢資料,得知可以通過新增publicpath:"../../"解決該問題:需要修改build資料夾下的utils.js**,如圖所示:
publicpath配置後,css檔案中引入的檔案路徑前新增了該路徑配置;
資源也可以直接放在vue-cli生成的static目錄下規避上述問題,但是通過這種方式名稱中無法增加md5字串,不利於版本控制。
vue專案靜態資源打包方法
如何用.npm run build打包靜態資源 1.開啟build資料夾下的webpack.base.conf.js,如下圖,將紅圈地方改為紅箭頭所指的一行 2.開啟config資料夾下index.js如下圖,將藍箭頭所指改為紅箭頭所指 3.開啟build資料夾下的utils.js如下圖,將圈出的 ...
vue模板工程中靜態資源引入的小坑
需求 同型別靜態放在了 src assets imgs下面,要在js 中引入這些資源。已知vue 採取es module規範,理論上應該避免使用commonjs的東西,所以第一反應不用require 而是使用import 發現報錯,大致是對應的位置沒有模組匯出。為什麼?vue模板工程中引入靜態資源,...
vue修改打包後靜態資源路徑
使用vue cli生成的專案,打包方式是直接執行package.json裡配置的指令碼 npm run build 這步其實是去執行build下的build.js指令碼檔案 node build build.js 複製 如果發布到伺服器資源,該靜態資源的路徑都是預設在根路徑下,大多數情況下是不符合期...