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

 更新时间:2024年03月25日 11:01:25   作者:白瑕  
这篇文章主要给大家介绍了关于HTML文档引入JS模块出现路径问题的解决办法,在HTML中引入JavaScript模块时如果遇到路径问题,通常是因为模块的引用路径不正确,本文将解决办法介绍的非常详细,需要的朋友可以参考下

前言

JS抽离, 引入three模块.

LiveServer报错:

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

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

一、错误情况

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';

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

二、解决办法

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

当导入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模块路径问题内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 如何确保JavaScript的执行顺序 之实战篇

    如何确保JavaScript的执行顺序 之实战篇

    我曾在文章《如何在多个页面使用同一个HTML片段 - 续》的最后提到JavaScript顺序执行的特性。虽然现代浏览器可以并行的下载JavaScript(部分浏览器),但考虑到JavaScript的依赖关系,他们的执行依然是按照引入顺序进行的。
    2011-03-03
  • Openlayers学习之加载鹰眼控件

    Openlayers学习之加载鹰眼控件

    这篇文章主要介绍了Openlayers学习之加载鹰眼控件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-09-09
  • JavaScript改变函数作用域的方法示例

    JavaScript改变函数作用域的方法示例

    本文主要介绍了JavaScript改变函数作用域的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • 关于Bootstrap弹出框无法调用问题的解决办法

    关于Bootstrap弹出框无法调用问题的解决办法

    这篇文章主要介绍了关于Bootstrap弹出框无法调用问题的解决办法的相关资料,需要的朋友可以参考下
    2016-03-03
  • JS产生随机数的几个用法详解

    JS产生随机数的几个用法详解

    下面小编就为大家带来一篇JS产生随机数的几个用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • 使用js画图之饼图

    使用js画图之饼图

    这篇文章主要介绍了使用js绘制几何图形系列教程的绘制饼图篇,需要的朋友可以参考下
    2015-01-01
  • Node.js开发指南中的简单实例(mysql版)

    Node.js开发指南中的简单实例(mysql版)

    工作原因需要用到nodejs,于是找到了《node.js开发指南》这本书来看看,作者BYVoid 为清华大学计算机系的高材生,年纪竟比我还小一两岁,中华地广物博真是人才辈出,佩服
    2013-09-09
  • JavaScript返回网页中超链接数量的方法

    JavaScript返回网页中超链接数量的方法

    这篇文章主要介绍了JavaScript返回网页中超链接数量的方法,使用javascript中的document.links实现这一功能,需要的朋友可以参考下
    2015-04-04
  • javascript使用正则获取url上的某个参数

    javascript使用正则获取url上的某个参数

    使用indexOf取得?之后的参数,以&使split进行分割成数组,下面展示了一个从url上获取名为MenuCode参数的过程
    2014-09-09
  • TypeScript中的 ! 和 ? 操作符

    TypeScript中的 ! 和 ? 操作符

    在 TypeScript 中,! 和 ? 是两个非常重要且常用的操作符,分别用于非空断言和可选链操作,下面就来具体介绍一下如何使用,具有一定的参考价值,感兴趣的可以了解一下
    2025-02-02

最新评论