-
Notifications
You must be signed in to change notification settings - Fork 967
"Multiple instances of Three.js being imported." warning, when working with npm packages of three.js and AR.js in one project #504
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
Does the warning go away if you remove three from the dependencies? I have a feeling the issue might be that AR.js already has a three.js dependency, and the built AR.js bundle already contains a copy of three.js so you are importing two separate copies of three.js, at different versions. If that doesn't help, @kalwalt might know more as he developed the packaging system for AR.js. |
This was my first thought too, but when I remove three.js I can't no longer create scenes, renderer, etc... e.g.: |
If you keep the three import, but remove it from the dependencies, does it work? |
Nope, unfortunately not :( |
Is this just with markers, does it work with location-based? |
The warning appears with location only too. |
I had this issue in the past, but i don' t remember now how i solved, but i will look into It when i can. |
Thank you, will be greatly appreciated! |
Will try and have a look at location, but no guarantees I'll be able to solve it. I guess it's something to do with the packaging process. |
Three is included as an external package in webpack Lines 9 to 22 in be7c908
Maybe add three to |
Another thing: Can you try instead to import the whole THREE namespace with: |
Thx for the swift response. I'm currently not at home, but I'll give it a shot as soon as I'm back. The repo for this is https://github.com/FireDragonGameStudio/ARIndoorNavigation-Threejs but the current state is not pushed yet. Will do that as soon as I'm home too and give you an update here :) |
Unfortunately none of the suggested solutions helped. Neither moving I already pushed the current state of the project without installed three npm package, so feel free to check it out and play around. Will try to bundle with webpack tomorrow. I have a feeling that Vite is messing with me... Oo |
I think it depends by the set up. I see that you specify in package.json https://github.com/FireDragonGameStudio/ARIndoorNavigation-Threejs/blob/a21badd7bbd2ef33512acf39ce849ec142a485ba/package.json#L5 |
The warning unfortunately still appears :/ |
I thought I recognised this warning, but had not given it priority as it didn't stop anything working. To investigate this, I've prepared an absolute basic location-based three.js example here: https://github.com/nickw1/arjs-three-basic/ This uses My observations seem similar to @FireDragonGameStudio:
@kalwalt does this help? |
I can confirm this but i haven't a solution at the moment. Thank you @nickw1 |
I'm getting the same issue but with aframe location-based. It's causing me to have multiple video streams I'm pretty sure. I'm in the process of moving over from a html file to vue and where my vue set-up gets this warning and also has a second video window, one from the video element and one from the canvas it seems? I believe it's due to both ar-js and aframe importing three.js. @kalwalt did you ever find a solution? |
I think this is related to the way the build is bundling the files. I made a test modifying the UMD config of the Meanwhile, there is a workaround in webpack that worked for me. Setting an This is an answer from this post https://discourse.threejs.org/t/threejs-custom-lib-usage-generate-warning-multiple-instances-of-three-js-being-imported/35292/3 module.exports = {
// ...
resolve: {
// ...
alias: {
three: path.resolve('./node_modules/three')
},
// ...
},
// ...
}; |
Thanks Juan, shame that I've already given up on Vue and gone back to barebones html, css and js now |
I'm just wondering whether another source of problems is that @kalwalt does this make sense? |
Hi to all @FireDragonGameStudio @juanRabaa @Platform-Group in this thread, I merged PR #615 It should solve this issue (for THREEX at least) can you test the dev branch? I will make a new AR.js release in few days. Thanks to all! |
Hi and first of all sry for the late reply. Thank you for your time and hard work @kalwalt, but I unfortunately still have the issue with the multiple instances warning. It also appears with minimal setup, when setting up a project in vite for vanillajs, install the npm packages for three.js and ar.js, and import them in main.js. Maybe I am missing smth here Oo Is it possible to use three.js functionality with ar-threex.js too, like creating scenes and stuff? Or is the npm version or ar.js not up-to-date, with the latest release? |
You should import the ar-threex.mjs package not ar-threex.js. After have installed the package with npm try to import the needed classes in this way |
Did exactly that, but unfortunately the warning still appears. Just added a few lines to actually show smth. Sry for being such a nuisance :/ Code: import "./style.css";
import javascriptLogo from "./javascript.svg";
import viteLogo from "/vite.svg";
import { ArToolkitProfile } from "@ar-js-org/ar.js/three.js/build/ar-threex.mjs";
import * as THREE from "three";
const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
renderer.setAnimationLoop(animate);
document.body.appendChild(renderer.domElement);
const hemiLight = new THREE.HemisphereLight(0x404040, 0xffffff, 0.5);
scene.add(hemiLight);
const geometry = new THREE.BoxGeometry();
const material = new THREE.MeshStandardMaterial({ color: 0x00ff00 });
const cube = new THREE.Mesh(geometry, material);
cube.position.z = -5;
scene.add(cube);
const rotationSpeed = 0.5;
const clock = new THREE.Clock();
function animate() {
requestAnimationFrame(animate);
const delta = clock.getDelta();
cube.rotation.x += rotationSpeed * delta;
cube.rotation.y += rotationSpeed * delta;
renderer.render(scene, camera);
}
window.addEventListener("resize", () => {
camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();
renderer.setSize(window.innerWidth, window.innerHeight);
}); package.json: {
"name": "vite-three-ar",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview"
},
"devDependencies": {
"vite": "^6.0.5"
},
"dependencies": {
"@ar-js-org/ar.js": "^3.4.6",
"three": "^0.172.0"
}
} |
What happens if you not import the whole THREE namespace but only the single classes (Scene, PerspectiveCamera and so on...) ? Sorry i have no time to test and gor helping in this period... |
No worries, it's not blocking., it's still just a warning. Unfortunately using the single classes doesn't help, the warning is still there. |
@FireDragonGameStudio maybe the issue occur because some bundlers require a "module" field in the package.json file. I will try to add it in the Ar.js package.json file, but i'm not sure that it will solve the issue, because as main is Line 5 in 0670578
"module": "./aframe/build/aframe-ar.mjs" and not "module": "./three.js/build/ar-threex.mjs" . The solution is to add modularity to the whole AR.js project, as discussed elsewhere, this is on my ticked list but i can't say when it will happens.
|
I could add the module version to AR.js-threejs. I will post here when it's ready. 🙂 |
For anyone interested: working on this PR AR-js-org/AR.js-threejs#22 |
I succesfully merged the PR and i think solved the issue , at least in AR.js-threejs, You can test in the AR.js-threejs example-vite or i have created a testing repository on my profile ar.js-threejs-test. i noticed that i got the Three.js multiple instances warning if the three.js versions diverge ( the one installed in AR.js-threejs and that one in the vite project) they should be the same: 0.164.0 in any package.json files. Maybe you can test @FireDragonGameStudio? Thank you! |
@FireDragonGameStudio in regards of my previous comment can you test again this code with |
OMG, changing the three.js version did the trick! The warning disappeared @kalwalt 🙀 |
You're a genius, I would've never thought of that as the warnings cause! |
I have never thought of that too, I will add a Post Edit on the top of this topic as a reminder for other people 😄 |
Uh oh!
There was an error while loading. Please reload this page.
Do you want to request a feature or report a bug?
I want to report a bug, at least as far as I can tell.
What is the current behavior?
When importing three.js and AR.js for Marker Tracking (via npm packages, a warning that "Multiple instances of Three.js being imported." when starting the project. I use Vite as a bundler, if that information helps.
MyScript.js
I checked the three.js samples, they seem to import the three.js min library. May this be related?
I'll attach my package.json content too.
package.json
If the current behavior is a bug, please provide the steps to reproduce.
I just created a new project and added the npm packages via
npm i three
andnpm i @ar-js-org/ar.js
. When using Vite as bundler, starting the project withnpx vite
and the web dev tools console will show the warning.Please mention other relevant information such as the browser version, Operating System and Device Name
Firefox, Chrome on their latest versions.
What is the expected behavior?
No warning.
If this is a feature request, what is motivation or use case for changing the behavior?
not a feature request
❗ ❗ Post Edit by @kalwalt
This warning may show if you are using divergent three.js versions, between the
three
version used by AR.js and that one used in your project, they should match!!and import the classes from the module version
import { ArToolkitProfile } from "@ar-js-org/ar.js/three.js/build/ar-threex.mjs";
This is working at least for ar.mjs and ar-threex.mjs dist files and related classes.
The text was updated successfully, but these errors were encountered: