ES6类的引用和<Script type=“module“>导致的跨域问题

问题

用ES6的class实现了一个类。并且在script中用一个自执行函数,直接new一个实例来执行。类中方法太多,想重构到别的类中。

然而只要Class 加上import语句,script中就报错,找不到这个类。

解决办法

还是用import引入类。并且在主类下面记得export default 类名

然后设置script属性<script type="module">设置后代码才会被当成ES6模块,才能出现import和export关键词。所以在自执行函数前面 import 主类 from './mainClass.js'这样就能够找到了。

紧接着又报了跨域的错误。vscode可以用LiveServer插件解决这个问题。因为HTML使用type="module"会默认产生跨域请求,而file协议并不支持。

直接右键HTML文件选择Open with Live Server

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以用 JavaScript Import Map 的方式来代替在 HTML 中直接引入 JavaScript 模块的方式。具体来说,可以创建多个导入项,然后在代码中使用这些导入项来加载 Three.js 模块、GLTFLoader 模块和 OrbitControls 模块。 在 HTML 文件中添加以下代码: ```html <!DOCTYPE html> <html> <head> <title>Three.js Example</title> <style> body { margin: 0; overflow: hidden; } </style> <script type="importmap"> { "imports": { "three": "./js/libs/three.module.js", "three/examples/jsm/loaders/GLTFLoader": "./js/libs/GLTFLoader.js", "three/examples/jsm/controls/OrbitControls": "./js/libs/OrbitControls.js" } } </script> </head> <body> <script type="module"> import * as THREE from "three"; import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader"; import { OrbitControls } from "three/examples/jsm/controls/OrbitControls"; // 在这里编写 Three.js 应用程序的代码 </script> </body> </html> ``` 然后可以在 JavaScript 代码中使用以下方式来加载 Three.js 模块、GLTFLoader 模块和 OrbitControls 模块: ```javascript import * as THREE from "three"; import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader"; import { OrbitControls } from "three/examples/jsm/controls/OrbitControls"; // 在这里编写 Three.js 应用程序的代码 ``` 这样就可以将原来在 HTML 中直接引入 Three.js、GLTFLoader 和 OrbitControls 模块的方式改为使用 JavaScript Import Map 和 ES6 模块的方式来加载模块了。需要注意的是,为了让该方式生效,需要在支持 JavaScript Import Map 和 ES6 模块的环境下运行代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值