-
-
Notifications
You must be signed in to change notification settings - Fork 36k
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.js
It'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.js
The 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: