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

Vue3靜態(tài)文件打包404的解決方案

 更新時(shí)間:2026年01月06日 08:59:21   作者:實(shí)習(xí)生小黃  
在 Vue3 + Vite 項(xiàng)目開發(fā)過程中,經(jīng)常會遇到靜態(tài)資源文件在開發(fā)環(huán)境正常,但打包后出現(xiàn) 404 錯(cuò)誤的問題,本文通過一個(gè)實(shí)際案例——引入 MarchingSquares.js 庫的過程,詳細(xì)分析問題的原因和解決方案,需要的朋友可以參考下

前言

在 Vue3 + Vite 項(xiàng)目開發(fā)過程中,經(jīng)常會遇到靜態(tài)資源文件(如第三方 JS 庫、圖片、字體等)在開發(fā)環(huán)境正常,但打包后出現(xiàn) 404 錯(cuò)誤的問題。本文通過一個(gè)實(shí)際案例——引入 MarchingSquares.js 庫的過程,詳細(xì)分析問題的原因和解決方案。

問題背景

項(xiàng)目中需要使用 MarchingSquares.js 這個(gè)第三方庫,該庫需要在 HTML 中通過 <script> 標(biāo)簽直接引入。在開發(fā)過程中,我們嘗試了多種路徑配置方式,但都遇到了不同的問題:

  • 使用相對路徑 ./MarchingSquaresJS/MarchingSquares.js:打包后文件不存在
  • 使用 ./public/MarchingSquaresJS/MarchingSquares.js:打包后文件存在,但訪問時(shí) 404
  • 最終使用 /MarchingSquaresJS/MarchingSquares.js:開發(fā)和生產(chǎn)環(huán)境都正常

解決方案

嘗試一:使用相對路徑./MarchingSquaresJS/MarchingSquares.js

配置方式:

<script type="text/javascript" src="./MarchingSquaresJS/MarchingSquares.js"></script>

結(jié)果:

  • ? 打包后 dist 目錄下不存在 MarchingSquaresJS 文件夾
  • ? 文件無法被訪問

原因分析:

  1. Vite 只會處理在代碼中通過 import 導(dǎo)入的資源,對于 HTML 中直接引用的靜態(tài)資源,Vite 不會自動處理
  2. 如果文件不在 public 目錄下,Vite 在打包時(shí)不會將其復(fù)制到 dist 目錄
  3. 相對路徑 ./ 在 HTML 中解析時(shí),會基于當(dāng)前 HTML 文件的位置,但打包后的文件結(jié)構(gòu)可能不同

嘗試二:移動到 public 目錄并使用./public/MarchingSquaresJS/MarchingSquares.js

配置方式:

<script type="text/javascript" src="./public/MarchingSquaresJS/MarchingSquares.js"></script>

結(jié)果:

  • ? 打包后 dist 目錄下出現(xiàn)了 MarchingSquaresJS/MarchingSquares.js 文件
  • ? 訪問打包后的頁面時(shí),瀏覽器嘗試訪問 ./public/MarchingSquaresJS/MarchingSquares.js,出現(xiàn) 404 錯(cuò)誤

原因分析:

  1. Vite 會將 public 目錄下的文件原樣復(fù)制到 dist 目錄的根目錄,但不會保留 public 這個(gè)目錄名
  2. 例如:public/MarchingSquaresJS/MarchingSquares.jsdist/MarchingSquaresJS/MarchingSquares.js
  3. 但 HTML 中寫的是 ./public/MarchingSquaresJS/MarchingSquares.js,瀏覽器會嘗試訪問 dist/public/MarchingSquaresJS/MarchingSquares.js,這個(gè)路徑不存在

最終方案一:使用絕對路徑/MarchingSquaresJS/MarchingSquares.js

配置方式:

<script type="text/javascript" src="/MarchingSquaresJS/MarchingSquares.js"></script>

結(jié)果:

  • ? 開發(fā)環(huán)境(npm run dev)正常訪問
  • ? 生產(chǎn)環(huán)境(打包后)正常訪問(前提是部署在根目錄)

原因分析:

  1. / 開頭的路徑是絕對路徑,相對于網(wǎng)站根目錄
  2. Vite 會將 public 目錄下的文件復(fù)制到 dist 根目錄,所以 public/MarchingSquaresJS/dist/MarchingSquaresJS/
  3. 使用 /MarchingSquaresJS/MarchingSquares.js 可以正確訪問到 dist/MarchingSquaresJS/MarchingSquares.js
  4. 在開發(fā)環(huán)境中,Vite 的 dev server 也會將 public 目錄作為靜態(tài)資源根目錄,所以同樣可以訪問

局限性:

  • 如果應(yīng)用部署在子目錄(如 /app/),硬編碼的 /MarchingSquaresJS/... 路徑會失效
  • 需要手動根據(jù)部署路徑修改 HTML 中的路徑

最終方案二:使用BASE_URL模板變量(推薦)

配置方式:

<script type="text/javascript" src="<%- BASE_URL %>MarchingSquaresJS/MarchingSquares.js"></script>

結(jié)果:

  • ? 開發(fā)環(huán)境(npm run dev)正常訪問
  • ? 生產(chǎn)環(huán)境(打包后)正常訪問
  • ? 支持部署到任意路徑(根目錄或子目錄)

原因分析:

  1. BASE_URLvite-plugin-html 插件提供的模板變量
  2. 它的值自動等于 Vite 配置中的 base 選項(xiàng)值
  3. 當(dāng) base: '/' 時(shí),BASE_URL = '/'
  4. 當(dāng) base: '/app/' 時(shí),BASE_URL = '/app/'
  5. 這樣可以根據(jù)部署路徑自動調(diào)整資源路徑,無需手動修改 HTML

優(yōu)勢:

  • 自動適配不同的部署路徑
  • 與 Vite 的 base 配置保持一致
  • 無需手動維護(hù)路徑,減少出錯(cuò)概率

原理

Vite 的 public 目錄機(jī)制

Vite 對 public 目錄有特殊的處理規(guī)則:

開發(fā)環(huán)境(dev):

  • public 目錄下的文件會被映射到網(wǎng)站根路徑 /
  • 例如:public/favicon.icohttp://localhost:3000/favicon.ico
  • 例如:public/MarchingSquaresJS/MarchingSquares.jshttp://localhost:3000/MarchingSquaresJS/MarchingSquares.js

生產(chǎn)環(huán)境(build):

  • public 目錄下的所有文件會被原樣復(fù)制dist 目錄的根目錄
  • 不會保留 public 目錄名
  • 例如:public/MarchingSquaresJS/MarchingSquares.jsdist/MarchingSquaresJS/MarchingSquares.js
  • 例如:public/favicon.icodist/favicon.ico

路徑解析規(guī)則

在 HTML 中,路徑的解析方式如下:

路徑格式解析方式示例
/path/to/file.js絕對路徑,相對于網(wǎng)站根目錄http://localhost:3000/path/to/file.js
./path/to/file.js相對路徑,相對于當(dāng)前 HTML 文件所在目錄如果 HTML 在 /,則解析為 /path/to/file.js
../path/to/file.js相對路徑,相對于當(dāng)前 HTML 文件的父目錄如果 HTML 在 /sub/,則解析為 /path/to/file.js
path/to/file.js相對路徑,等同于 ./path/to/file.js同上

為什么絕對路徑/可以工作?

開發(fā)環(huán)境:

  • Vite dev server 將 public 目錄映射到 /
  • /MarchingSquaresJS/MarchingSquares.jspublic/MarchingSquaresJS/MarchingSquares.js ?

生產(chǎn)環(huán)境:

  • 打包后文件在 dist/MarchingSquaresJS/MarchingSquares.js
  • 如果部署在網(wǎng)站根目錄,/MarchingSquaresJS/MarchingSquares.js 直接對應(yīng) dist/MarchingSquaresJS/MarchingSquares.js ?
  • 如果部署在子目錄(如 /app/),需要配置 base 選項(xiàng)(見下文)

Vite 配置

base 配置的作用

vite.config.ts 中,base 選項(xiàng)用于設(shè)置應(yīng)用的公共基礎(chǔ)路徑

export default defineConfig({
  base: '/',  // 默認(rèn)值,應(yīng)用部署在根目錄
  // 或者
  base: '/app/',  // 應(yīng)用部署在子目錄
})

作用:

影響打包后的資源路徑:

  • 當(dāng) base: '/' 時(shí),所有資源路徑都是絕對路徑(如 /assets/index.js
  • 當(dāng) base: '/app/' 時(shí),所有資源路徑會加上前綴(如 /app/assets/index.js

影響 HTML 中的路徑解析:

  • 如果 HTML 中使用絕對路徑 /path/to/file.js,且 base: '/app/'
  • 實(shí)際訪問路徑會是 /app/path/to/file.js

總結(jié)

關(guān)鍵要點(diǎn)

靜態(tài)資源必須放在 public 目錄:

  • 只有 public 目錄下的文件會被 Vite 復(fù)制到 dist 目錄
  • public 目錄名不會出現(xiàn)在打包后的路徑中

使用絕對路徑 /BASE_URL 而不是相對路徑:

  • 絕對路徑 /path/to/file.js 相對于網(wǎng)站根目錄
  • 相對路徑 ./path/to/file.js 可能在不同環(huán)境下解析不一致
  • 推薦使用 BASE_URL,可以自動適配不同的部署路徑

base 配置的作用:

  • 主要用于設(shè)置應(yīng)用的公共基礎(chǔ)路徑
  • 影響打包后資源的路徑前綴
  • 對于 HTML 中直接寫的絕對路徑,base 的影響有限
  • BASE_URL 模板變量的值自動等于 base 配置

BASE_URL 的優(yōu)勢:

  • 自動適配部署路徑(根目錄或子目錄)
  • 與 Vite 的 base 配置保持一致
  • 支持通過環(huán)境變量配置,無需修改代碼

開發(fā)和生產(chǎn)環(huán)境的一致性:

  • 使用 / 開頭的絕對路徑或 BASE_URL,可以保證開發(fā)和生產(chǎn)環(huán)境行為一致
  • Vite 的 dev server 和打包后的靜態(tài)服務(wù)器都會正確處理

推薦配置

方案一:使用絕對路徑(適合固定部署在根目錄)

<!-- index.html -->
<script type="text/javascript" src="/MarchingSquaresJS/MarchingSquares.js"></script>
// vite.config.ts
export default defineConfig({
  base: '/',  // 固定部署在根目錄
  // ... 其他配置
})

方案二:使用 BASE_URL(推薦,支持靈活部署)

<!-- index.html -->
<script type="text/javascript" src="<%- BASE_URL %>MarchingSquaresJS/MarchingSquares.js"></script>
// vite.config.ts
export default defineConfig({
  base: isProd ? APP_BASE_PATH : '/',  // 根據(jù)實(shí)際部署路徑調(diào)整
  plugins: [
    // ... 其他插件
    createHtmlPlugin({
      minify: isProd,
      inject: {
        data: {
          title: APP_TITLE,
          // BASE_URL 會自動等于 base 的值,無需手動設(shè)置
        },
      },
    }),
  ],
  // ... 其他配置
})

對比:

方案優(yōu)點(diǎn)缺點(diǎn)適用場景
絕對路徑 /簡單直接不支持子目錄部署固定部署在根目錄
BASE_URL自動適配部署路徑需要了解模板語法需要支持多環(huán)境部署

以上就是Vue3靜態(tài)文件打包404的解決方案的詳細(xì)內(nèi)容,更多關(guān)于Vue3靜態(tài)文件打包404的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 前端vue3項(xiàng)目使用漢字轉(zhuǎn)拼音幾種解決方案

    前端vue3項(xiàng)目使用漢字轉(zhuǎn)拼音幾種解決方案

    這篇文章主要介紹了前端vue3項(xiàng)目使用漢字轉(zhuǎn)拼音幾種解決方案,文中通過代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2025-06-06
  • Vue手把手教你擼一個(gè) beforeEnter 鉤子函數(shù)

    Vue手把手教你擼一個(gè) beforeEnter 鉤子函數(shù)

    這篇文章主要介紹了Vue手把手教你擼一個(gè) beforeEnter 鉤子函數(shù),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-04-04
  • vue.js中v-on:textInput無法執(zhí)行事件問題的解決過程

    vue.js中v-on:textInput無法執(zhí)行事件問題的解決過程

    大家都知道vue.js通過v-on完成事件處理與綁定,但最近使用v-on的時(shí)候遇到了一個(gè)問題,所以下面這篇文章主要給大家介紹了關(guān)于vue.js中v-on:textInput無法執(zhí)行事件問題的解決過程,需要的朋友可以參考下。
    2017-07-07
  • 如何使用vue3+uni-app封裝音樂播放插件

    如何使用vue3+uni-app封裝音樂播放插件

    UniApp是一個(gè)基于Vue.js開發(fā)的跨平臺應(yīng)用開發(fā)框架,它可以使用一套代碼同時(shí)構(gòu)建iOS、Android和Web應(yīng)用,這篇文章主要給大家介紹了關(guān)于如何使用vue3+uni-app封裝音樂播放插件的相關(guān)資料,需要的朋友可以參考下
    2023-11-11
  • 一文詳解Vue3內(nèi)置組件的使用

    一文詳解Vue3內(nèi)置組件的使用

    Vue3內(nèi)置組件是一組預(yù)定義的組件,直接嵌入框架,無需手動導(dǎo)入即可在模板中使用,下面這篇文章主要介紹了Vue3內(nèi)置組件使用的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-09-09
  • 簡單的vuex 的使用案例筆記

    簡單的vuex 的使用案例筆記

    這篇文章主要介紹了簡單的vuex 的使用案例筆記,本文通過demo 是一個(gè) 改變 app 的模式 的一個(gè)appellation ,選擇是 夜間模式還是白天模式,具體代碼大家參考下本文
    2018-04-04
  • Vue.js 踩坑記之雙向綁定

    Vue.js 踩坑記之雙向綁定

    這篇文章給大家?guī)砹薞ue.js 踩坑記之雙向綁定問題,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友跟隨腳本之家小編一起學(xué)習(xí)吧
    2018-05-05
  • Vue登錄頁面的動態(tài)粒子背景插件實(shí)現(xiàn)

    Vue登錄頁面的動態(tài)粒子背景插件實(shí)現(xiàn)

    本文主要介紹了Vue登錄頁面的動態(tài)粒子背景插件實(shí)現(xiàn),將登錄組件背景設(shè)置為 "粒子背景",具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • 簡單理解vue中track-by屬性

    簡單理解vue中track-by屬性

    這篇文章主要幫助大家簡單的理解vue中track-by屬性,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • @error函數(shù)vue圖片加載失敗空白頁解決方案

    @error函數(shù)vue圖片加載失敗空白頁解決方案

    這篇文章主要介紹了@error函數(shù)vue圖片加載失敗空白頁解決方案,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08

最新評論

浦县| 阿拉善盟| 无棣县| 抚顺市| 密云县| 小金县| 桐乡市| 老河口市| 敖汉旗| 大荔县| 共和县| 樟树市| 万源市| 大方县| 怀集县| 双柏县| 札达县| 富顺县| 金阳县| 惠水县| 陕西省| 年辖:市辖区| 南和县| 基隆市| 四川省| 苏州市| 健康| 工布江达县| 翁牛特旗| 临泉县| 湾仔区| 增城市| 密山市| 茂名市| 霍州市| 宁乡县| 都安| 锦州市| 礼泉县| 乌鲁木齐县| 宜宾市|