使用 webpack、Threejs 示例和 TypeScript?

2024-01-12

我在将 Threejs 示例(如 EffectComposer 或 Detector)中的内容与 webpack 和 typescript 一起使用时遇到了很多麻烦。

先把相关的*.d.ts文件全部存在并通过安装tsd。我的问题是让 webpack 实际上包含默认 Threejs 构建之外的文件(即examples/js/).

With three从 npm 安装我可以做类似的事情

import THREE = require('three');

效果很好,但缺乏上述任何优点。 npm 上还有一些其他的 Threejs 包捆绑了插件,但我认为它们不能与 TypeScript 一起使用(因为require('three-js')(['EffectComposer'])被打字稿编译器拒绝。

有人在这个包中得到了一些东西(比如后处理)来使用打字稿吗?


我设法找到了一种非常干净的方法来设置它webpack.config.js.

根据丹的回答:

$ npm install --save-dev imports-loader

事实证明我们实际上并不需要exports-loader,因为 Three.js 示例将其构造函数添加到THREE object.

然后,在webpack.config.js,我们可以添加一条规则来添加var THREE = require('three');如果模块的路径解析为包含以下内容的任何内容,则指向导入的模块three/examples/js:

module: {
  rules: [
    ...
    {
      test: /three\/examples\/js/,
      use: 'imports-loader?THREE=three'
    }
  ]
}

现在,示例模块将在需要时找到三个全局变量。

然后,为了让导入示例变得不那么冗长:

resolve: {
  alias: {
    'three-examples': path.join(__dirname, './node_modules/three/examples/js')
  },
  ...
},

这假设webpack.config.js与以下目录位于同一目录中node_modules,进行相应调整。

现在,我们可以像这样使用示例文件:

import * as THREE from 'three';
import 'three-examples/controls/OrbitControls';

导入该模块以消除其副作用。

如果您将其与 Typescript 和/或 Babel 一起使用,并且收到有关找不到示例模块的警告THREE,你可能会发现这个问题 https://github.com/webpack-contrib/imports-loader/issues/68 on the imports-loader存储库可供参考。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 webpack、Threejs 示例和 TypeScript? 的相关文章

随机推荐

  • 在 VS Code 中禁用斜体语法突出显示

    一些单词 function if else return等 会自动格式化为斜体是 VS Code 我怎样才能禁用这种行为 您可以使用以下用户配置强制 VS 禁用主题的所有斜体 editor tokenColorCustomizations
  • 当两个用户/朋友彼此靠近时发出警报 - Android Proximity

    我尝试搜索但找不到任何东西 我的问题是 如果 2 个或更多用户彼此靠近 我如何提醒他们 在android中使用地理围栏或其他东西 假设 如果用户 A 在足球场中 而用户 B 在该足球场附近行走 然后 UserA 和 UserB 自动收到 U
  • 使用自定义 IP 从 Docker 注册到 Eureka

    我在 Docker VM 中运行 Spring Cloud Eureka 我有注册到它的服务 但它们使用 Docker VM 内部的 IP 地址 但为了能够正确使用它们 我需要它们使用我可以从 VM 外部访问的 IP 地址 例如 在我的虚拟
  • SQLite3 导入 CSV 并排除/跳过标头

    我正在尝试将我的数据文件 其中有十几个左右 放入 SQLite 中的表中 每个文件都有一个标题 我将在未来的一年中多次收到它们 所以我想 当我收到文件时 避免编辑每个文件以删除标头 避免依靠 shell 脚本或 Python 来执行此操作
  • Outlook Javascript API - window.open 无法在 Outlook 2016 桌面/Windows 上运行

    我有一个用新的 JavaScript API 编写的 Office 加载项 其中有一个 JS 函数 经过一些逻辑后 该函数在新窗口中打开一个 Web 应用程序window open url blank 当从 Outlook Web 中的加载
  • 我可以设置 Javascript 对象的类型吗?

    我正在尝试遵循 Doug Crawford 的 超级构造函数 模式 使用 Javascript 的一些更高级的 OO 功能 但是 我不知道如何使用 Javascript 的本机类型系统设置和获取对象的类型 我现在的情况是这样的 functi
  • CSS:如何摆脱默认窗口“填充”?设置为 100% 宽度的元素不会到达窗口边框

    所以我有一个直接放置在 body 内部的元素 div Some stuff div Other stuff 以下是使用的CSS body text align center header margin auto 因此 header div
  • 使用 Jeff Atwood 的示例清理 HTML

    我正在使用 Jeff Atwood 发现的代码清理我的 Htmlhere http refactormycode com codes 333 sanitize html 但我遇到的问题是当我将 Markdown 链接输入表单时 它们被删除
  • 使用java.util.logging登录控制台

    我只想使用 java util Logging 登录控制台 Logger log Logger getLogger my logger log setLevel Level ALL ConsoleHandler handler new Co
  • 从另一个 docker 容器连接到 Mongodb docker 容器

    我正在尝试从运行我的节点js代码的另一个docker容器连接在docker容器中运行的mongo DB 所以我使用以下命令运行 MongoDB docker docker run name my local mongo v mongo da
  • 从数据库下载exe文件

    我已经将一些 exe 文件上传到数据库中 因为我不希望它们可供公开访问 我尝试使用链接按钮和通用处理程序来使用以下代码提供文件 Context Response Clear Context Response ContentType appl
  • 请求 ruby​​-on-rails 应用程序会出现 Psych::BadAlias 错误

    我从应用程序目录运行 Rails 服务器 但是当我尝试从浏览器发出请求时 http localhost 3000 我收到以下错误 Psych BadAlias 无法加载Rails application database configura
  • WebRTC 连接在本地网络之外无法工作

    我们对 webrtc 双向视频和音频流进行了以下设置 Mobile Android应用程序使用谷歌网络RTC https webrtc org 实现java包装器 测试了这两个库 implementation org webrtc goog
  • Pandas 将字典列表分解为行

    拥有这个 items name 0 a 2 b 1 a 4 b 3 this 1 a 2 b 1 a 4 b 3 that 但希望将字典对象列表分解为 展平 为实际行 如下所示 a b name 0 2 1 this 1 4 3 this
  • Angular 2 Promise/Observable 链两个事件?

    我想知道是否可观察到的 or promise可用于 Angular 2 中的以下用例 有两个异步上传任务 我想知道如何检测这两项任务都已完成 我的上传任务 实现于promise但它很容易改变为可观察到的如果需要的话 是这样的 myServi
  • 在 macOS 中通过命令行与 Siri 交互

    我在手机和手表上使用 Siri 随时随地创建提醒 当我在办公室时 我不想使用 Siri 打扰安静 因此我通常使用与 提醒 应用程序集成的 Alfred 工作流程 或者直接使用 提醒 应用程序 然而 两者都有一个相当笨拙的界面 如果我可以在命
  • Zbar SDK - 缺少所需的架构 x86_64

    我在最近的 Xcode 5 1 中构建应用程序时遇到了一个问题 编译失败 并出现 架构 x86 64 的未定义符号 错误 我使用有效架构构建我的项目 armv7 armv7s 和 arm64 切换到最新的环境 Xcode 后 我在相同的架构
  • 随机化一个 BigInteger

    I m looking to randomize a BigInteger The intent is to pick a number from 1 to 8180385048 Though from what I noticed the
  • 运行 gulp 任务时如何解决“在 MakeCallback 中使用域属性已被弃用”警告?

    我正在使用带有 gulp 的节点来运行一些构建任务 直到几天前 这一切都还顺利 现在 我假设在升级 更新后 不确定是哪一个 我相信这是节点从 14 4 更新到 14 5 我不断收到此警告 DEP0097 DeprecationWarning
  • 使用 webpack、Threejs 示例和 TypeScript?

    我在将 Threejs 示例 如 EffectComposer 或 Detector 中的内容与 webpack 和 typescript 一起使用时遇到了很多麻烦 先把相关的 d ts文件全部存在并通过安装tsd 我的问题是让 webpa