diff --git a/docs/pages/common_issues.mdx b/docs/pages/common_issues.mdx index 804ad542..4bcd8901 100644 --- a/docs/pages/common_issues.mdx +++ b/docs/pages/common_issues.mdx @@ -14,4 +14,9 @@ If you are using sentry, API routes returns empty body. You could try configurin #### My ISR page has this cache-control header `s-maxage=2, stale-while-revalidate=2592000` -Given how ISR works, while waiting for the revalidation to happen, the page will be served using this cache control header. This prevent your server from being overloaded by a lot of requests while the revalidation is done. You can read more about it [here](/inner_workings/isr). \ No newline at end of file +Given how ISR works, while waiting for the revalidation to happen, the page will be served using this cache control header. This prevent your server from being overloaded by a lot of requests while the revalidation is done. You can read more about it [here](/inner_workings/isr). + +#### Unzipped size must be smaller than 262144000 bytes + +AWS Lambda has an unzipped size limit of 250MB. If your app is over this limit, then it is most likely using a node_module library that is too large for serverless or there is a large dev dependency getting bundled. +For example, `pdfjs` has `canvas` optional dependency which takes up 180MB. For more details, [read me](/common_issues/bundle_size) \ No newline at end of file diff --git a/docs/pages/common_issues/bundle_size.mdx b/docs/pages/common_issues/bundle_size.mdx new file mode 100644 index 00000000..d2facd3d --- /dev/null +++ b/docs/pages/common_issues/bundle_size.mdx @@ -0,0 +1,39 @@ +import {Callout} from 'nextra/components' + + +#### Reducing Bundle Size + +Next will incorrectly trace dev dependencies to be included in the output `node_modules`, which will significantly increase the lambda bundle. For example, the @swc/core-\* binary is ~33MB! + +Add this to your next.config.js to help minimize the lambda bundle size: + +```typescript + outputFileTracingExcludes: { + '*': [ + '@swc/core', + 'esbuild', + 'uglify-js', + 'watchpack', + 'webassemblyjs' + ], + }, +``` + + + NextJS currently doesn't expose `outputFileTracingExcludes` as an environmental variable so `open-next`cannot programmatically set this like it does for`output`and`outputFileTracingRoot`. + Currently, next uses `webpack` to trace server actions, so you shouldn't add `webpack` to the excludes list, otherwise it will break server actions. + + +#### Unzipped size must be smaller than 262144000 bytes + +To identify the module that's taking up too much space (and isn't serverless friendly): + +```bash +du -hs .open-next/server-function/node_modules/* | sort -rh +``` + +If your app requires the offending library, then consider moving your business logic of the `api` to its own lambda, eg: `/api/v2` => `Api Lambda` + + + There is a [PR](https://github.com/sst/open-next/pull/242) to remove some dev dependency from the output node_modules but that requires more testing before it can merge. + \ No newline at end of file