【问题标题】:Three.js specific imports failing, possibly Webpack's faultThree.js 特定导入失败,可能是 Webpack 的错
【发布时间】:2018-12-21 00:34:00
【问题描述】:

免责声明:我使用的是create-react-appthree.js v0.99.0

我正在尝试导入特定的 three.js 模块,因为直接从根模块导入包括捆绑包中的整个库,未压缩为 0.5MB。最直接的src/ 导入工作正常,但是在导入几何时,AKA 会改变这个:

import { Geometry } from "three";

到这里:

import { Geometry } from "three/src/core/Geometry";

我的图表上绘制的线条不再出现,也没有错误消息。此外,直接从src/ 导入 WebGLRendered 导致整个事情崩溃:

import { WebGLRenderer } from "three"; // from this
import { WebGLRenderer } from "three/src/renderers/WebGLRenderer"; // to this

出现错误:

WebGLIndexedBufferRenderer.js:14 Uncaught TypeError: Cannot read property 'type' of undefined
    at WebGLIndexedBufferRenderer.setIndex (WebGLIndexedBufferRenderer.js:14)
    at WebGLRenderer.renderBufferDirect (WebGLRenderer.js:505)
    at renderObject (WebGLRenderer.js:932)
    at renderObjects (WebGLRenderer.js:913)
    at WebGLRenderer.render (WebGLRenderer.js:790)
    at SceneManager.js:75
    ...

我在three.js 库中检查了这些模块的定义,它们实际上是在three.module.jssrc/ 之间复制粘贴的,所以我找不到任何代码差异。但是,我确实注意到的一件事是,如果我同时导入并打印它们,Webpack 似乎正在转换我从 src/ 导入的那个:

ƒ Geometry() {
  Object.defineProperty(this, 'id', {
    value: geometryId += 2
  });
  this.uuid = _math_Math_js__WEBPACK_IMPORTED_MODULE_10__["_Math"].generateUUID();
  ...

相对于:

ƒ Geometry() {
  Object.defineProperty(this, 'id', {
    value: geometryId += 2
  });
  this.uuid = _Math.generateUUID();
  ...

create-react-app 的 Webpack 是否可能会混淆 src/ 文件夹中的导入,从而使它们无法工作,尽管源代码相同?如果是这样,有没有办法让它只在 MY src/ 文件夹中转译代码,而不是第 3 方模块?

【问题讨论】:

    标签: javascript webpack import three.js create-react-app


    【解决方案1】:

    这可能是一个 babel 问题。默认情况下,babel 不会转译 node_modules 中的任何内容,但是您是从 ES6 源导入的,因此您需要强制它转译这些内容。在你的 webpack 配置中,你应该有一个 js(x) 文件的规则(在 module.rules 中),看起来像

    {
      test: /\.jsx?$/,
      use: 'babel-loader'
    }
    

    添加一个自定义排除,它将排除 node_modules 中的所有内容除了 three 文件,即

    {
      test: /\.jsx?$/,
      exclude: /node_modules\/(?!three)/,
      use: 'babel-loader'
    }
    

    【讨论】:

    • 由于我们使用的是create-react-app,因此我们无法直接访问wepback.config.js,除非我们将其弹出,但我们还没有这样做。我是否必须将其弹出才能更改配置?
    • 我不熟悉从create-react-app 弹出 - 你能弹出它来测试一下这个想法,如果它不起作用,可以逆转弹出吗?
    • 试图弹出来测试它,实际上有 1000 件东西坏了,甚至无法让它运行:( 将继续尝试。
    猜你喜欢
    • 2021-06-22
    • 1970-01-01
    • 1970-01-01
    • 2017-06-10
    • 2021-12-27
    • 1970-01-01
    • 2013-10-24
    • 2014-06-29
    • 2018-09-16
    相关资源
    最近更新 更多