HTML文档引入JS模块出现路径问题解决办法

 更新时间:2024年03月25日 11:01:25   作者:白瑕  
这篇文章主要给大家介绍了关于HTML文档引入JS模块出现路径问题的解决办法,在HTML中引入JavaScript模块时如果遇到路径问题,通常是因为模块的引用路径不正确,本文将解决办法介绍的非常详细,需要的朋友可以参考下
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

前言

JS抽离, 引入three模块.

LiveServer报错:

Uncaught TypeError: Failed to resolve module specifier "three".
Relative references must start with either "/", "./", or "../".

事实上我已经数不清这是第多少次遇到这种问题了, 用HTML文档写一些库的案例, 然后各种引入报错, 找不到包之类.
只是这次的问题解决让我印象颇深, 也收获颇丰.

一、错误情况

1.three引入

html:

<script src="http://9i0i.com/pic.php?p=./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';

结果就是两个都没能成功引入.

二、解决办法

路径没有写错, 只能说打包之后路径错误找不到某个模块了.

当导入JavaScript模块时, import语句和import()运算符都有一个"模块标识符", 其指示要导入的模块. 浏览器根据此标识符解析出绝对路径, 才能成功导入.

导入映射(import map)是一个 JSON 对象, 其允许开发者在导入 JavaScript 模块时, 控制浏览器如何解析模块标识符. 它提供了在 import 语句或 import() 运算符中用作模块标识符的文本, 其会在解析标识符时与要替换的文本之间建立映射.

在HTML文件增加以下来协助浏览器正确解析模块标识符, 这段代码可以在three.js源码的example任意一个案例中找到.
第一个映射修正three模块的路径, 第二个修正OrbitControls等附加模块的路径.

<script type="importmap">
  {
    "imports": {
      "three": "../../node_modules/three/build/three.module.js",
      "three/addons/": "../../node_modules/three/examples/jsm/"
    }
  }
</script>

three的引入问题在于路径错误, LiveServer最后是需要找到three.module.js, three的其他附加模块需要找到jsm.
OrbitControls这种不在three.module.js内的模块导入, 可以在不配置importmap内three/addons/的情况下:

import { OrbitControls } from '../../node_modules/three/examples/jsm/controls/OrbitControls.js';

实际上就是把importmap里的内容直接写到了js里.

但是对于three.module.js这种一次性导出多个类的文件就只能写在importmap里了.

gsap引入失败的问题在于HTML文档里是不能直接这样:

import gsap from 'gsap';

引入使用的.

需要先配置importmap:

<script type="importmap">
  {
    "imports": {
      "gsap": "../../node_modules/gsap/index.js"
    }
  }
</script>

然后再:

import { gsap } from 'gsap';

路径不固定, 只要引导到index.js即可.

或者不配置importmap, 直接js文件里这样写:

import { gsap } from '../../node_modules/gsap/index.js';

总结

到此这篇关于HTML文档引入JS模块出现路径问题解决办法的文章就介绍到这了,更多相关HTML引入JS模块路径问题内容请搜索程序员之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持程序员之家!

相关文章

  • JS html事件冒泡和事件捕获操作示例

    JS html事件冒泡和事件捕获操作示例

    这篇文章主要介绍了JS html事件冒泡和事件捕获操作,结合完整实例形式分析了javascript事件冒泡及事件捕获相关原理与实现方法,需要的朋友可以参考下
    2019-05-05
  • JS使用new操作符创建对象的方法分析

    JS使用new操作符创建对象的方法分析

    这篇文章主要介绍了JS使用new操作符创建对象的方法,结合实例形式分析了javascript面向对象程序设计类的定义、new操作符对象的创建及相关操作注意事项,需要的朋友可以参考下
    2019-05-05
  • 谈谈javascript中使用连等赋值操作带来的问题

    谈谈javascript中使用连等赋值操作带来的问题

    这篇文章主要介绍了javascript中使用连等赋值操作带来的问题的相关资料,需要的朋友可以参考下
    2015-11-11
  • 分享JavaScript监听全部Ajax请求事件的方法

    分享JavaScript监听全部Ajax请求事件的方法

    最近在做一个小项目,引入了第三方js文件,这个文件会调用XMLHttpRequest向服务器发送 Ajax请求,但是我有需要监听其Ajax请求的某些事件,以便额外地执行其他脚本。于是稍微看了看监听 Ajax请求的事件方法,在这里分享给大家。有需要的朋友们可以参考借鉴。
    2016-08-08
  • web前端页面生成exe可执行文件的方法

    web前端页面生成exe可执行文件的方法

    这篇文章给大家介绍了Electron 怎么将网页打包成桌面应用(web前端页面怎么生成exe可执行文件),感兴趣的朋友跟随程序员之家小编一起学习吧
    2018-02-02
  • JS 中可以提升幸福度的小技巧(可以识别更多另类写法)

    JS 中可以提升幸福度的小技巧(可以识别更多另类写法)

    本文主要介绍一些JS中用到的小技巧,可以在日常Coding中提升幸福度,将不定期更新
    2018-07-07
  • JavaScript数据类型转换简单方法举例

    JavaScript数据类型转换简单方法举例

    JavaScript是一种无类型语言,但同时JavaScript提供了一种灵活的自动类型转换的处理方式,下面这篇文章主要给大家介绍了关于JavaScript数据类型转换的相关资料,需要的朋友可以参考下
    2023-12-12
  • 原生JS实现垂直手风琴效果

    原生JS实现垂直手风琴效果

    本篇文章主要介绍了原生JS实现垂直手风琴效果的示例代码,具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • js将URL网址转为16进制加密与解密函数

    js将URL网址转为16进制加密与解密函数

    这篇文章主要介绍了js将URL网址转为16进制加密与解密函数,很多朋友喜欢将网址转换为16进制,网上实在找不到转换为\x这样的工具,于是手工改一下
    2020-03-03
  • 微信小程序之onLaunch与onload异步问题详解

    微信小程序之onLaunch与onload异步问题详解

    这篇文章主要介绍了微信小程序之onLaunch与onload异步问题详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03

最新评论

?


http://www.vxiaotou.com