簡體   English   中英

Three.js特定的導入失敗,可能是Webpack的錯誤

[英]Three.js specific imports failing, possibly Webpack's fault

免責聲明:我正在使用create-react-appthree.js v0.99.0

我正在嘗試導入特定的three.js模塊,因為直接從根模塊導入包括捆綁包中的整個庫,壓縮后的文件大小為0.5MB。 大多數直接src/導入都可以正常工作,但是在導入Geometry時,也可以更改以下內容:

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個partiyy模塊的代碼中進行轉碼?

這可能是通天塔的問題。 默認情況下,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'
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM