-
-
Notifications
You must be signed in to change notification settings - Fork 36.1k
Description
The goal with tree-shaking here is I should be able to import a class from 'three', and only get the classes needed. In my test bundle importing only Vector2 is producing a 295 KB (uncompressed) file still with lots of remaining side-effects even after r141 and all the work done on #24006 (down from a 1 MB bundle in r140).
I'm opening this issue to resolve the remaining side-effects, which is do-able with some more work, and we have a couple ways of testing that.
Also to make the claim that 'three' is finally fully tree-shakeable, we'll need to verify that in the most popular bundlers. I'll start with Rollup, Webpack, Parcel and esbuild. Open to suggestions of other bundlers and configurations, and will start with a simple test of importing only Vector2.
Steps to reproduce the behavior:
import { Vector2 } from 'three';
console.log(new Vector2(0, 1));And with agadoo:
npx agadoo
...
Failed to tree-shake build/three.module.jsIt's worth noting that importing from the source files with agadoo also fails, and is something I can look into as well.
npx agadoo src/Three.js
...
Failed to tree-shake src/Three.jsThe expected behavior, regardless of agadoo, is simply looking at the output bundle. If I import Vector2, I'm expecting only the @license header comment, and Vector2, nothing else.
References: