Skip to content

Commit 5f2c9d0

Browse files
authored
Update subset validation in @next/font/google and fix CJK bug (#44594)
Currently there's a bug when selecting Chinese, Japanese or Korean (CJK) as subsets. ```js const notoSans = Noto_Sans_JP({ subsets: ['japanese'], }) ``` It actually doesn't work, nothing preloads. This PR solves this by removing CJK languages as candidates for preloading. The reason is that they contain so many glyphs that each font-family is split up in 100+ font files. It doesn't make sense to preload all of them. So CJK users will have to disable preloading. ```js const notoSansJapanese = Noto_Sans_JP({ weight: '400', preload: false, }) ``` In case you do manually disable preloading like above, the default `font-display` is changed to `swap`. This PR also improves the validation errors of subsets. 1. Providing unknown subset ``` `@next/font` error: Unknown subset `japanese` for font `Inter`. Available subsets: `cyrillic`, `cyrillic-ext`, `greek`, `greek-ext`, `latin`, `latin-ext`, `vietnamese` ``` 2. Missing specified subset. The error has a link with further instructions. ``` `@next/font` error: Missing selected subsets for font `Inter`. Please specify subsets in the function call or in your `next.config.js`. Read more: https://nextjs.org/docs/messages/google-fonts-missing-subsets ``` fixes NEXT-336 ## Bug - [ ] Related issues linked using `fixes #number` - [ ] Integration tests added - [ ] Errors have a helpful link attached, see [`contributing.md`](https://github.com/vercel/next.js/blob/canary/contributing.md) ## Feature - [ ] Implements an existing feature request or RFC. Make sure the feature request has been accepted for implementation before opening a PR. - [ ] Related issues linked using `fixes #number` - [ ] [e2e](https://github.com/vercel/next.js/blob/canary/contributing/core/testing.md#writing-tests-for-nextjs) tests added - [ ] Documentation added - [ ] Telemetry added. In case of a feature if it's used or not. - [ ] Errors have a helpful link attached, see [`contributing.md`](https://github.com/vercel/next.js/blob/canary/contributing.md) ## Documentation / Examples - [ ] Make sure the linting passes by running `pnpm build && pnpm lint` - [ ] The "examples guidelines" are followed from [our contributing doc](https://github.com/vercel/next.js/blob/canary/contributing/examples/adding-examples.md)
1 parent 2c49972 commit 5f2c9d0

File tree

9 files changed

+3558
-1593
lines changed

9 files changed

+3558
-1593
lines changed

errors/google-fonts-missing-subsets.md

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ Preload is enabled for a font that is missing a specified subset.
66

77
#### Possible Ways to Fix It
88

9-
Specify which subsets to preload for that font.
9+
##### Specify which subsets to preload for that font.
1010

1111
- On a font per font basis by adding it to the function call
1212

@@ -29,6 +29,17 @@ module.exports = {
2929

3030
If both are configured, the subset in the function call is used.
3131

32+
##### Disable preloading for that font
33+
34+
If it's not possible to preload your intended subset you can disable preloading.
35+
36+
```js
37+
const notoSansJapanese = Noto_Sans_JP({
38+
weight: '400',
39+
preload: false,
40+
})
41+
```
42+
3243
### Useful Links
3344

34-
[Specifying a subset](https://beta.nextjs.org/docs/optimizing/fonts#specifying-a-subset)
45+
[Specifying a subset](https://nextjs.org/docs/basic-features/font-optimization#specifying-a-subset)

0 commit comments

Comments
 (0)