"WeakMap key must be an object, got source", only on textures

Hi everybody,

First of all, here’s my config :

I don’t know if this is a THREE issue but when I load a texture this way :

import terrainheightmap from './park.png';
const terrainheight = useLoader(THREE.TextureLoader, terrainheightmap);

The object seems to bee there but I’ve got this issue :

I can"t find any documentation on how to solve that, that’s the first time I got this problem (a Frontity-Webpack issue ? It works very well with the simple create-react-app starter project ?)
It seems to be a THREE error, where should I investigate ?

Have a very nice day !

Vincent.

(here are the files, but they need frontity to be installed)
https://vincentlhoste.fr/forum1/question.rar

Edit 1 : It seems it’s not a loader issue as I manage to load my png image only in my app.

This error can appear if you accidentally use multiple three.js versions in a single build. So please make sure that three.js isn’t imported more than once and all project components are comptabile to the used three.js version (in your case r138).

Thanks a lot for your answer !!
Could you please confirm it has nothing to do with importing THREE.js in two separate files that need both THREE to be imported → as on the screenShot below :


I used to do that on other projects and never got a problem with this.
(JS and JSX do not make a difference)

& my package.json
image

As also, it should recognise the import is the same and build it only once.

Sorry, I’m not familiar with react-three/fiber so I can’ t tell you if your setup is right.

OK thanks a lot anyway ! I installed a webpack plugin to warn about duplicates, I don’t know if It did the work or if this is a THREE warning but I now have a marvellous warning that seems to confirm what you’re saying : i’ll dig on that (I don’t manage to find where it’s imported twice).

it usually happens when 3rd party libs have wrong imports, like one imports from “three” (correct) another from “three/src/index.js” (incorrect) or “three/dist/three.module.js” (also incorrect), things like that. nothing really specific in r3f, it imports from “three”. or sometimes a bundler can’t decide between versions, when versioning ranges conflict.

in your package json there’s @react-three/gltfjsx which is unusual, it’s a cli tool, something that you run (npx gltfjsx model.gltf) but you normally don’t install. that indeed relies on a slightly older three that node has to install.

in the worst case alias “three” to node_modules/three and it’s done. though before you do that better find the root cause.

Thanks a lot for your help, I’m on It. I’ll try to find the root cause as I’d prefer too :nerd_face:. Ok for GTLFJSX, I’ll clean this and noticed about the version.

For this subject, problem was a conflict between same packages. In my project there was :

  • A first package.json for the main project
  • A second for the theme (multi themes)
    And confusion between them… I choosed to use the same package.json for everything rather than try to mix them.