HTML文檔引入JS模塊出現(xiàn)路徑問題解決辦法
前言
JS抽離, 引入three模塊.
LiveServer報(bào)錯(cuò):
Uncaught TypeError: Failed to resolve module specifier "three".
Relative references must start with either "/", "./", or "../".
事實(shí)上我已經(jīng)數(shù)不清這是第多少次遇到這種問題了, 用HTML文檔寫一些庫的案例, 然后各種引入報(bào)錯(cuò), 找不到包之類.
只是這次的問題解決讓我印象頗深, 也收獲頗豐.
一、錯(cuò)誤情況
1.three引入
html:
<script src="./js/main.js" type="module"></script>
JavaScript:
import * as THREE from 'three';
import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
2.gsap引入
沒有在html文檔做操作, 直接npm下包在js文件引入:
import gsap from 'gsap';
結(jié)果就是兩個(gè)都沒能成功引入.
二、解決辦法
路徑?jīng)]有寫錯(cuò), 只能說打包之后路徑錯(cuò)誤找不到某個(gè)模塊了.
當(dāng)導(dǎo)入JavaScript模塊時(shí), import語句和import()運(yùn)算符都有一個(gè)"模塊標(biāo)識(shí)符", 其指示要導(dǎo)入的模塊. 瀏覽器根據(jù)此標(biāo)識(shí)符解析出絕對(duì)路徑, 才能成功導(dǎo)入.
導(dǎo)入映射(import map)是一個(gè) JSON 對(duì)象, 其允許開發(fā)者在導(dǎo)入 JavaScript 模塊時(shí), 控制瀏覽器如何解析模塊標(biāo)識(shí)符. 它提供了在 import 語句或 import() 運(yùn)算符中用作模塊標(biāo)識(shí)符的文本, 其會(huì)在解析標(biāo)識(shí)符時(shí)與要替換的文本之間建立映射.
在HTML文件增加以下來協(xié)助瀏覽器正確解析模塊標(biāo)識(shí)符, 這段代碼可以在three.js源碼的example任意一個(gè)案例中找到.
第一個(gè)映射修正three模塊的路徑, 第二個(gè)修正OrbitControls等附加模塊的路徑.
<script type="importmap">
{
"imports": {
"three": "../../node_modules/three/build/three.module.js",
"three/addons/": "../../node_modules/three/examples/jsm/"
}
}
</script>
three的引入問題在于路徑錯(cuò)誤, LiveServer最后是需要找到three.module.js, three的其他附加模塊需要找到j(luò)sm.
OrbitControls這種不在three.module.js內(nèi)的模塊導(dǎo)入, 可以在不配置importmap內(nèi)three/addons/的情況下:
import { OrbitControls } from '../../node_modules/three/examples/jsm/controls/OrbitControls.js';
實(shí)際上就是把importmap里的內(nèi)容直接寫到了js里.
但是對(duì)于three.module.js這種一次性導(dǎo)出多個(gè)類的文件就只能寫在importmap里了.
gsap引入失敗的問題在于HTML文檔里是不能直接這樣:
import gsap from 'gsap';
引入使用的.
需要先配置importmap:
<script type="importmap">
{
"imports": {
"gsap": "../../node_modules/gsap/index.js"
}
}
</script>
然后再:
import { gsap } from 'gsap';
路徑不固定, 只要引導(dǎo)到index.js即可.
或者不配置importmap, 直接js文件里這樣寫:
import { gsap } from '../../node_modules/gsap/index.js';
總結(jié)
到此這篇關(guān)于HTML文檔引入JS模塊出現(xiàn)路徑問題解決辦法的文章就介紹到這了,更多相關(guān)HTML引入JS模塊路徑問題內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JS實(shí)現(xiàn)上傳圖片實(shí)時(shí)預(yù)覽功能
這篇文章主要介紹了JS實(shí)現(xiàn)上傳圖片實(shí)時(shí)預(yù)覽功能,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-05-05
javascript 框架小結(jié) 個(gè)人工作經(jīng)驗(yàn)
javascript 框架小結(jié) 個(gè)人工作經(jīng)驗(yàn),對(duì)于新手來說還是值得學(xué)習(xí)的。2009-06-06
javascript時(shí)間與時(shí)間戳互轉(zhuǎn)多種方式
javascript獲取時(shí)間、時(shí)間戳等,最核心的就是利用Date關(guān)鍵詞去獲取,時(shí)間戳的獲取方式整理了5種方法,后4種是利用new Date()實(shí)例化對(duì)象來獲取當(dāng)前時(shí)間,再對(duì)當(dāng)前獲取的時(shí)間再進(jìn)一步處理獲取時(shí)間戳,本文給大家介紹的非常詳細(xì),需要的朋友參考下吧2023-11-11
javascript 動(dòng)態(tài)改變層的Z-INDEX的代碼style.zIndex
javascript 動(dòng)態(tài)改變層的Z-INDEX的代碼style.zIndex...2007-08-08
《javascript設(shè)計(jì)模式》學(xué)習(xí)筆記一:Javascript面向?qū)ο蟪绦蛟O(shè)計(jì)對(duì)象成員的定義分析
這篇文章主要介紹了《javascript設(shè)計(jì)模式》學(xué)習(xí)筆記Javascript面向?qū)ο蟪绦蛟O(shè)計(jì)對(duì)象成員的定義,結(jié)合實(shí)例形式分析了《javascript設(shè)計(jì)模式》中JavaScript面向?qū)ο蟪绦蛟O(shè)計(jì)的原理、定義、用法及操作注意事項(xiàng),需要的朋友可以參考下2020-04-04
如何利用Three.js實(shí)現(xiàn)web端顯示點(diǎn)云數(shù)據(jù)
這篇文章主要給大家介紹了關(guān)于如何利用Three.js實(shí)現(xiàn)web端顯示點(diǎn)云數(shù)據(jù)的相關(guān)資料,最近在項(xiàng)目中遇到需求,需要在web端顯示點(diǎn)云數(shù)據(jù),將我的實(shí)現(xiàn)步驟介紹在這里供大家參考,需要的朋友可以參考下2023-11-11
js簡單實(shí)現(xiàn)刪除記錄時(shí)的提示效果
刪除記錄時(shí)的提示效果,挺人性化的,實(shí)現(xiàn)的方法有很多,在本文為大家介紹下使用js是如何實(shí)現(xiàn)的2013-12-12

