Open zchenwei opened 2 years ago
@zchenwei by any chance did you progress on this? I use Tsup to build a script and end up with a lot of code, it's even marked as not used when I open the file in VS Code. However, Esbuild indeed enables tree-shaking by default in bundle mode, so it's maybe more an issue with the code. There are not many documentation on how to debug tree-shaking to detect where the code is no correctly seen as "pure" and tree-shaking gets disabled.
@eric-burel check out the new treeshake
option if you don't mind being a little bit slower XD https://tsup.egoist.sh/#tree-shaking
Thanks for this very fast answer!
It seems to work better, any idea why? Also tsup-node
seems removed from v6 but is still documented, is there a replacement for it?
No problem with it being slower I only build TypeScript scripts this way, not full apps.
Edit: so treeshake is fixed! but I really need tsup-node otherwise the script built doesn't work
@eric-burel sorry about that, tsup-node
is back in 6.0.1
, I accidentally deleted it 🥲
It seems that overall the tree shaking is better, even without --treeshake
actually, just by updating Tsup. My initial issue was next/router
leaking in the script and this already disappear just after updating tsup to v6.
Adding --treeshake
will also remove a few unused imports.
Did you change something between v5/v6? Maybe updating esbuild version?
Cannot thank you enough, this helps me having a pattern to run startup scripts in serverless frameworks such as Next. In a serverless logic, you need to run some logic on "post build", instead of running on "server startup" as you do with a long-running server, so it becomes critical to be able to build scripts that work outside of the Next.js app.
Did you change something between v5/v6? Maybe updating esbuild version?
no, it's been 0.14.25
for quite a while.
it's probably because --shims
is not enabled by default now 🤔
@eric-burel l switch to use Rollup
for bundling amplify ui library because our goal is not only to tree shake the library itself, but more importantly, to make sure the library is tree-shakeable for our users when bundling an App. Rollup
has a very good option preserveModule
to help us achieve the goal versus bundling a whole bunch of things into a single file, which is not good for bundler to do code analysis and dead code detection. @egoist I like the simplicity in tsup and hope we can have an option similar to that where the module structure can be well preserved :)
@zchenwei Thanks for the insights, I might need that as I was disappointed that our bundle went bigger with ESM instead of smaller...
I guess we would simply need more access to rollup config for advanced customization? Currently it's only quoted in the Tree shaking doc.
@egoist I couldn't find any documentation for this option though, only in webpack. I guess I still have some global variables and that's my initial issue (typically accessing process.env to get some value globally instead of wrapping that into a function) , it's hard to spot them in the codebase. Anyway the build sounds better now so great.
@eric-burel check out the new
treeshake
option if you don't mind being a little bit slower XD [redacted]
@egoist the redacted URL in this comment seems to redirect through to a malware site (survey-smiles dot com). Might be best to scrub that link so other people don't get caught by it.
Updated link to tsup tree shake docs
I know tsup is powered by esbuild which supports tree shaking by default. However, I don't see much details about this part on the doc sites. So I was wondering if tsup inherits this good nature and what I can reference to make a lib bundled with tsup tree shakable. Thanks!
Upvote & Fund