firebase / firebase/firebase-js-sdk
firebase/auth and firebase/database treeshaking please
- Dominant language
- TypeScript
- Stars
- 5.1k
- Forks
- 1k
- Avg merge
- 2d 21h
- Merged PRs (30d)
- 37
Description
Current firebase: 9.9.1
Some of firebase's modules are tree-shaking friendly, but some still aren't. In particular, `firebase/database` and `firebase/auth`.
For example, I have a module that doesn't need to do actual authentication, but just get persistence storage, and generate tokens. But even just importing `getAuth` (`import {getAuth} from "firebase/auth";`) still brings +300kb out of the file's 400kb to the rollup bundle (80kb after terser, etc, but still). Things that get included: all the `*AuthProvider()`; all `*Persistence()`; `Subscription`, `Redirects`, etc.
I know that the new philosophy behind the SDK is to support function-based import, and I think some other modules saw a big difference. But this still hurts quite a bit.
A similar problem with `firebase/database`. If you only want to get/set values from the realtime database, you must import almost the whole file for something that can be actually replaced by a fetch with token to the REST API.
Right now, doing:
```
import {initializeApp} from "firebase/app";
import {getAuth} from "firebase/auth";
import {getDatabase} from "firebase/database";
const app = initializeApp(firebaseConfig);
const auth = getAuth(app);
const db = getDatabase(auth);
```
and bundling with rollup generates a 738kb pre-terser (193kb after) and those two modules are the biggest offender.
Maybe there's a magical `rollupConfig.treeshake` option that I'm missing, but it would be nice to have a solutions for those.
Contributor guide
Assessment
This issue has not been assessed yet.