Commit graph

13 commits

Author SHA1 Message Date
Ben Heidemann
fbf1c97eac
Add experimental proxy timeout option (#40289)
<!--
Thanks for opening a PR! Your contribution is much appreciated.
In order to make sure your PR is handled as smoothly as possible we
request that you follow the checklist sections below.
Choose the right checklist for the change that you're making:
-->

## Bug

- [X] Related issues linked using `fixes #number`
- [ ] Integration tests added
- [ ] Errors have helpful link attached, see `contributing.md`

Fixes #36251
2022-09-06 20:14:08 -07:00
Steven
4cc7f11da2
Update to stable: next/future/image, remotePatterns, unoptimized (#40142)
This PR updates a few features from experimental to stable status:

- `next/future/image` component
- `remotePatterns` configuration
- `unoptimized` configuration
2022-08-31 22:44:17 +00:00
Balázs Orbán
6da621df63
feat: add experimental.fallbackNodePolyfills flag (#39248)
For historical reasons, Next.js has been falling back to polyfill certain Node.js APIs in the browser. `webpack` itself stopped doing it, and so should Next.js. This might unexpectedly break some packages in the ecosystem though, so it is being introduced as an experimental flag. These imports will now throw a `Module not found` error and the package maintainer should make sure that the library isn't relying on these Node.js APIs when the package is meant for browser usage. 

Let's take a look at a common example, the `crypto` API, which can be imported as `import crypto from "crypto"` but [should already be available in browsers](https://caniuse.com/cryptography). Until now, Next.js has fallen back to use a polyfilled version for the import, which resulted in a bundle-size increase.


```js
import crypto from 'crypto'
import { useEffect } from 'react'
export default function Page() {
  useEffect(() => {
    console.log(crypto)
  }, [])
}
```

it imports `crypto`, which currently resolves to [`crypto-browserify`](https://www.npmjs.com/package/crypto-browserify).

So the bundle will include `crypto-browserify` as well:
```sh
Page                                       Size     First Load JS
┌ ○ /                                      131 kB          213 kB # <--
└ ○ /404                                   194 B          82.2 kB
+ First Load JS shared by all              82 kB
  ├ chunks/framework-bcc2dc0ea27ab0c6.js   45.1 kB
  ├ chunks/main-dc2421aef72299b4.js        35.4 kB
  ├ chunks/pages/_app-a85935458980c5c2.js  708 B
  └ chunks/webpack-9b312e20a4e32339.js     836 B
```

Here, we can just remove the import, as we are [safely accessing](https://nextjs.org/docs/migrating/from-create-react-app#safely-accessing-web-apis) the [Crypto Web API](https://caniuse.com/cryptography):

```diff
- import crypto from 'crypto'
import { useEffect } from 'react'
export default function Page() {
  useEffect(() => {
    console.log(crypto)
  }, [])
}
```

Which will reduce the bundle size:

```sh
Page                                       Size     First Load JS
┌ ○ /                                      269 B          82.2 kB # <--
└ ○ /404                                   194 B          82.1 kB
+ First Load JS shared by all              81.9 kB
  ├ chunks/framework-bcc2dc0ea27ab0c6.js   45.1 kB
  ├ chunks/main-dc2421aef72299b4.js        35.4 kB
  ├ chunks/pages/_app-a85935458980c5c2.js  708 B
  └ chunks/webpack-fd82975a6094609f.js     727 B
```


This is harder to detect if the `crypto` import is in a third-party package though. By setting `experimental: { fallbackNodePolyfills: false }`, Next.js will now fail at build-time and should show where the unnecessary import comes from, so the developer can reach out to the package maintainer to fix this issue.

Note: There might be differences between the living standard and some of these older polyfills, so you have to make sure your code works well without the polyfilled version.

Related feedback: https://twitter.com/lfredolo/status/1539608666026000384
2022-08-26 23:11:57 +00:00
Chase Adams
b7c2bd104d
fix meaninglessFileNames type in compiler options schema (#39698)
# Bug 

I would assume that this should be generated from TypeScript, but based on the [original PR](https://github.com/vercel/next.js/pull/38498/files) it wasn't clear that there was a way to generate these automatically.

Fixes the type of `styledComponents. topLevelImportPaths` and `styledComponents.meaninglessFileNames` so that it matches the [TypeScript type](https://github.com/vercel/next.js/blob/canary/packages/next/server/config-shared.ts#L457).

This was causing a warning here:

```
warn  - Invalid next.config.js options detected: 
  - The value at .compiler.styledComponents must be a boolean but it was an object.
  - The value at .compiler.styledComponents.meaninglessFileNames must be a boolean but it was an array.
  - The value at .compiler.styledComponents must match exactly one schema in oneOf.
 ```

## Documentation / Examples

- [x] Make sure the linting passes by running `pnpm lint`



Co-authored-by: chaseadamsio <103162876+chaseadamsio@users.noreply.github.com>
2022-08-21 23:25:10 +00:00
Sukka
45ae757ff5
feat(config): implement a human readable ajv errors (#39291) 2022-08-03 15:12:16 -05:00
JJ Kasper
860c0281b1
Add exportPathMap config type/schema field (#39171) 2022-07-29 12:59:00 -05:00
JJ Kasper
7fa7204854
Add config for opting out of optimistic client cache behavior (#38774)
* Add config for opting out of optimistic client cache behavior

* update test
2022-07-26 10:27:39 -05:00
JJ Kasper
0de6269c9d
Update config-schema for relay field to be less strict (#39010) 2022-07-26 08:07:39 -05:00
JJ Kasper
05ba790cdb
Update config schema for empty basePath (#38998) 2022-07-25 13:34:09 -05:00
Zeeshan Ahmad
c49c6ab31b
fix: fix generateEtags type inside schema (#38936) 2022-07-22 19:57:58 +00:00
Sukka
02f46f022d
fix(#38090): add missing analyticsId to config schema (#38911) 2022-07-22 08:50:24 -05:00
Sukka
fe4b71132e
fix: correct the next config optimizeCss type (#38879)
`experimental.optimizeCss` from `next.config.js` can be an object containing the critters' option:

70a53e0789/packages/next/server/post-process.ts (L224-L232)

The PR corrects the ajv schema and the type definition of `experimental.optimizeCss`.
2022-07-21 17:53:41 +00:00
JJ Kasper
62f3f87891
Add next.config.js validation with ajv (#38498)
* Add next.config.js validation with ajv

* update manifest

* update lib type

* remove old tests

* update to pre-build validation code

* ensure validate output is ncced

* Apply suggestions from code review

Co-authored-by: Steven <steven@ceriously.com>

* Add example of typing next.config.js

Co-authored-by: Steven <steven@ceriously.com>
2022-07-13 13:31:55 -05:00