-
Notifications
You must be signed in to change notification settings - Fork 87
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: split up API Routes + use .nft.json files to make builds fast (#…
…2058) * feat: split up API Routes Brings back the functionality that was reverted in #1731, but under a flag. This will be utterly slow in building, so let's try to speed that up in the next step! * feat: load includedFiles for every page * refactor: extract function config logic * refactor: extract flag into own definition * feat: use "none" bundler for split-up api routes * feat: list some more dependencies * feat: use NFT to trace common required files * refactor: clean up a wee bit * fix: please don't include /sh * feat: enable flag by default, so tests use it * feat: add a naïve packing algo * feat: write rough sketch for packing lambdas * refactor: add constructor for APILambda * feat: pack handlers together into bundles * fix: linter * feat: exclude some heavy unneeded files * fix: trigger CI again, now that it supports `none` bundler * feat: remove code for old mechanism If we'll be doing a staged rollout, and our test suite covers most of the cases, we should be able to roll this out without a self-serve opt-out mechanism. * fix: remove test for deleted code * fix: ensure that react doesn't try to load development build * fix: move test directory into repo, so node_modules can be read * fix: snapshot with API redirects * fix: remove .only * fix: don't assert on _api_* * fix: another test * fix: apply NODE_ENV=prod to right generated handler * feat: remove nft tracing * feat: put change behind flag again * feat: source flag from plugin input * fix: add default value for featureflags * fix: default flag to true for testing * fix: revert changes to lockfiles * fix: eslint it/test * fix: lint * fix: revert distracting change * fix: now that we don't use nft anymore, we don't have to copy over node_modules * fix: swallow require.resolve errors for unit tests * fix: remove timing logs * fix: lint name * fix: lint * fix: isr needs _document.js * fix: add _app for ISR * fix: correct wrong output of some npm versions * fix: integration test For some reason, ZISI doesn't like relative paths in this integration test. We can fix it by using absolute paths. Since this PR moves API routes out of __netlify_handler, we can no longer make the assertion on x-nf-render-mode. * fix: assemble npm package path correctly, also for monorepos * fix: try what happens if we use next-netlify server * fix: check what happens when we skip revalidation * fix: dont let revalidate request time out * fix: send x-nextjs-cache header to prevent error * fix: update error message in test * fix: resolve relative paths based on data in required-server-files * fix: test * fix: keep manually-added `included_files` * fix: try something * fix: don't include unneeded _app pages in ISR * fix: finalize includedFiles before writing it onto netlifyConfig * chore: update comment * fix: exclude sass file in monorepos * Update packages/runtime/src/helpers/functions.ts * chore: remove comment * fix: update flag impl * refactor: use getRequiredServerFiles * chore: add comment on route[0] * fix: set NEXT_SPLIT_API_ROUTES in netlify.toml * fix: put updated revalidate behaviour behind flag * fix: supply splitApiRoutes in getHandler * fix: better run your code before committing it and embarrassing yourself --------- Co-authored-by: Nick Taylor <nick@iamdeveloper.com>
- Loading branch information
1 parent
5ee2fce
commit d98efc1
Showing
27 changed files
with
547 additions
and
101 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -6,6 +6,9 @@ on: | |
push: | ||
branches: [main] | ||
|
||
env: | ||
NEXT_SPLIT_API_ROUTES: true | ||
|
||
jobs: | ||
setup: | ||
runs-on: ubuntu-latest | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
import destr from 'destr' | ||
|
||
/** | ||
* If this flag is enabled, we generate individual Lambda functions for API Routes. | ||
* They're packed together in 50mb chunks to avoid hitting the Lambda size limit. | ||
* | ||
* To prevent bundling times from rising, | ||
* we use the "none" bundling strategy where we fully rely on Next.js' `.nft.json` files. | ||
* This should to a significant speedup, but is still experimental. | ||
* | ||
* If disabled, we bundle all API Routes into a single function. | ||
* This is can lead to large bundle sizes. | ||
* | ||
* Disabled by default. Can be overriden using the NEXT_SPLIT_API_ROUTES env var. | ||
*/ | ||
export const splitApiRoutes = (featureFlags: Record<string, unknown>): boolean => | ||
destr(process.env.NEXT_SPLIT_API_ROUTES) ?? featureFlags.next_split_api_routes ?? false |
Oops, something went wrong.