關於在 vite 中無法使用絕對地址動態導入的問題

来源:https://www.cnblogs.com/FreezeNow/archive/2023/04/14/17318363.html
-Advertisement-
Play Games

前言 前端開發者若要進行後端開發,大多都會選擇node.js,在node生態下是有大量框架的,其中最受新手喜愛的便是老牌的express.js,接下來我們就從零創建一個express項目。 安裝node 在這裡:https://nodejs.org/dist/v16.14.0/node-v16.14 ...


碰到一個賊無語的問題,有一個項目,需要使用虛擬鍵盤,找到了一個自稱能在 vue 3 使用的,還能導入詞庫,看起來挺好,裝完一用。好家伙,報錯一環接一環,給我整無語了。但是市面上已經沒有另外一款帶中文的虛擬鍵盤了,只能捏鼻子下載下來自己改了。

整了半天,終於讓組件能在 vue 3 + TS 下跑了,一看,我的中文呢?看了看文檔,只需要引用詞庫就行了,我便將地址丟入組件中,然後,程式就報錯了:TypeError: Failed to resolve module specifier '@/dict/baseDict.json'。

我直接一臉問號,明明這路徑存在資源啊。然後我就開始搜索,一開始我直接搜了報錯,發現和我的問題差之千里,就換成 TypeScript dynamic import 當關鍵詞,搜出來一些似是而非的答案,不過也給了我啟發。接下來我就使用 Vue 3 template string TypeScript dynamic import 當關鍵詞,還是找不到答案。

但是在找的過程中,我發現使用一些規律,下麵是代碼:

import('@/dict.json') // 正常
import('../../dict.json') // 正常
var url = '../dict.json'
import(url) // 正常

import(`${'@/dict.json'}`) // 報錯
var url = '@/dict.json' 
import(url) // 報錯
var url = 'dict.json'
import(`@/${url}`) // 報錯
import('@/' + url) // 報錯
var url = 'dict.json'
import('../../' + url) // 報錯,但不是無法引用,而是 MIME 不正確

// 該案例使用了 js 而不是 json
var url = 'dict.js'
import('../../' + url) // 正常
// dict.js
import baseDict from "./baseDict.json";
export default baseDict

不過這已經不重要了,因為我在這問題上花了很多時間,已經和這問題犟上了。雖然我可以直接寫死路徑,但是廢了大半天也找不到答案,我這不得給這問題解決咯再寫篇博客記錄一下?

接下來我轉換了思路,這個報錯不止最開始的 TypeError,後面還接了錯誤來源:runtime-core.esm-bundler.js。我去搜了搜,發現這是 vue 的 運行相關的東西,於是便搜索 runtime-core template string dynamic import。終於在第一個鏈接中找到了答案。

簡單點說就是 vite 不支持動態導入 '@/' + 變數 這種模式,只支持相對路徑。然後我去改了這個項目和另外一個 element plus 生成的路由引用組件的代碼,看看能否支持這個結論,結果是支持的,只要改成 import(`${'@/dict.json'}`) 就會報錯,這下思路就清晰了,只要改成相對地址就完事了。順手給項目對應的 github 提了個 issus,希望可以給 vue 3 的中文開源環境提供一點點貢獻吧(不過不知道變成包引用後,這個相對路徑該寫成什麼樣)。

之後又在 vue 2 的項目中試了試,發現在路由組件中使用 import(`${'@/view/home.vue'}`) 是可以正常運行的,和之前找到的答案有點出入,不過,以後再說8~


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 摘要:在金融創新壓力下,傳統集中式資料庫的短板逐漸凸顯出來,唯有加速核心系統的升級和轉型,將應用遷移到更具有可持續演進支撐能力的資料庫上,才能解決根本問題。 本文分享自華為雲社區《全面數字化時代,國有大型銀行如何走好金融創新之路?》,作者:GaussDB 資料庫。 近些年來,金融行業數字化轉型不斷推 ...
  • GreatSQL社區原創內容未經授權不得隨意使用,轉載請聯繫小編並註明來源。 GreatSQL是MySQL的國產分支版本,使用上與MySQL一致。 作者: Yejinrong/葉金榮 文章來源:GreatSQL社區投稿 背景介紹 編譯環境 編譯前準備工作 編譯GreatSQL 初始化並啟動Great ...
  • 本文由葡萄城技術團隊於博客園原創並首發轉載請註明出處:葡萄城官網,葡萄城為開發者提供專業的開發工具、解決方案和服務,賦能開發者。 項目想做數據可視化,想同時在PC端、手機端查看數據怎麼辦?業務主要關心的數據包括:銷售數據、業績達成、同比、環比,各產品銷售情況及潛客商機、未來收入預測等數據,最好附加人 ...
  • 新媒體時代,廣告樣式越來越豐富。相較於傳統的圖文信息,視頻類廣告更具有直觀性,能夠讓消費者在瞭解產品知識和功能的同時加深對產品的印象。 因此在各類網站或App上投放視頻類廣告是個很好的宣傳方式,但廣告商們如果想在網站上展示視頻廣告,必須確保視頻廣告投放協議與發佈渠道的播放器相容;如果不能相容,廣告商 ...
  • “我苦心鍛煉了三年,我變禿了,也變強了。” —— 琦玉老師 0x00 大綱 0x01 前言 四個月前,我在《你是來找茬的吧?對自己的博客進行調優》一文中探討了以博客的使用者而不是開發者身份去進行優化,究竟能做到何種程度的問題。當時以 Edge 瀏覽器的開發者工具里的 lighthouse 評分和載入 ...
  • 有一朋友想把網頁內容變成PDF下載下來。問我有沒有好辦法。 這還真巧了,咱公司也有這個需求,就是網頁生成合同,然後可以直接列印合同內容。最早吧,就是可以直接列印就好了。 當時為解決完美列印的問題,挺費勁的,當時第三方插件還有BUG(當然把解決放給發給作者了,作者早已經修複了),正經反覆折騰了好一陣子 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 Vue.js是一個基於組件化和響應式數據流的前端框架。當我們在Vue中編寫模板代碼時,它會被Vue編譯器處理並轉換為可被瀏覽器解析的JavaScript代碼。Vue中的模板實際上是HTML標記和Vue指令的組合,它們會被Vue編譯器處理並 ...
  • <!-- 封裝的模板下載和導入按鈕和功能組件--> <template> <span style="margin-left: 10px"> <el-button size="mini" class="el-icon-download" @click="downFiles"> 下載模板</el-but ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...