workers-graphql-server
workers-graphql-server copied to clipboard
TypeScript support, build too large
Hi Kris, I've been working on adding TypeScript support but I'm struggling with Wrangler not building correctly.
The only way I got it to build is by mocking modules in the webpack config like this to get the Apollo stuff to work
resolve: {
extensions: ['.ts', '.tsx', '.js'],
alias: {
fs: path.resolve(__dirname, './src/utils/empty.ts'),
busboy: path.resolve(__dirname, './src/utils/empty.ts'),
},
}
But this build is 2MiB so it can't get uploaded. Setting it to production mode also didn't help.
I also think that the way we're importing stuff from Apollo is a bit weird, I think Apollo should provide a nice interface that builds and compiles just fine instead of having to wrap the server in a function imported from dist. There's this issue for example that kinda leaves me scratching my head.
I have a simpler TypeScript repo that runs and deploys just fine.
If I get this to work, my plan is to convert a medium-sized codebase to Cloudflare workers. You got any pointers on where I can take this?
Hello @vladinator1000.
As I see your tsconfig.json
, you have set "module": "commonjs"
that not supported tree-shaking.
Could you try "module": "esnext"
instead ?
This is how my bundle looks like with "module": "esnext"` in the TS config. That's 1.5 MiB of dependencies.
When I use bundle optimize helper it says a bunch of deps are not tree shakeable because they're not using ES modules.
(Seem like this project really bundles a lot of dependencies.)
Anyway, with a quick looking. I have some suggestions.
- Could you try to change all importing from
/dist
to/esm
instead (if possible) ? (As I seegraphql-tools
&apollo-engine-reporting-protobuf
)
As I know the dist
directory inside node_modules
always be commonjs
type. Changing importing might help to cut some unused codes off.
- Update to import directly (
import test from 'lib/test'
) not (import { test } from 'lib'
)
If you have done already and it's size is still large, I have no idea for now : )
By the way, I'm the one who start build a project with typescript that scratch from this boilerplate too.
With a few general dependencies, It take lower than 1 MB.
So, hope you found a root cause soon.
Can anyone help me with TypeScript implementation of this template?
Hey, can anyone tell me how to set up TypeScript for this library?