Skip to content

Commit d562a89

Browse files
fix: loading custom font in nuxt module
1 parent 549872b commit d562a89

File tree

9 files changed

+17
-16
lines changed

9 files changed

+17
-16
lines changed

examples/nuxt/app.vue

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
<script setup lang="ts">
22
import { links } from 'unplugin-fonts/head'
3-
import src from 'unfonts.css?raw'
43
</script>
54

65
<template>
@@ -10,9 +9,6 @@ import src from 'unfonts.css?raw'
109
<div class="fontsource-truculenta">I'm a Truculenta fontsource</div>
1110
<div class="fontsource-variable">I'm a Noto Sans JP Variable fontsource</div>
1211
<pre>links: {{ links }}</pre>
13-
<ClientOnly>
14-
<pre>src: {{ src }}</pre>
15-
</ClientOnly>
1612
<a href="https://vitejs.dev/guide/features.html" target="_blank">Documentation</a>
1713
</template>
1814

examples/nuxt/nuxt.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ export default defineNuxtConfig({
1414
custom: {
1515
display: 'swap',
1616
families: {
17-
'Dancing Script': './assets/fonts/DancingScript*',
17+
'Dancing Script': './public/fonts/DancingScript*',
1818
},
1919
},
2020

src/loaders/custom.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import type { CustomFontFace, CustomFontFamily, CustomFonts } from '../types'
33
import fg from 'fast-glob'
44
import { basename as _basename, extname, join, relative } from 'pathe'
55

6-
type ResolvedCustomFonts = Required<Omit<CustomFonts, 'families'>> & { families: CustomFontFamily[] }
6+
type ResolvedCustomFonts = Required<Omit<CustomFonts, 'families' | 'linkFilter'>> & { families: CustomFontFamily[], linkFilter?: CustomFonts['linkFilter'] }
77

88
function resolveUserOption(options: CustomFonts): ResolvedCustomFonts {
99
let {
@@ -14,6 +14,7 @@ function resolveUserOption(options: CustomFonts): ResolvedCustomFonts {
1414
injectTo = 'head-prepend',
1515
display = 'auto',
1616
stripPrefix = 'public/',
17+
linkFilter,
1718
} = options
1819

1920
// --- Cast as array of `CustomFontFamily`.
@@ -33,6 +34,7 @@ function resolveUserOption(options: CustomFonts): ResolvedCustomFonts {
3334
injectTo,
3435
display,
3536
stripPrefix,
37+
linkFilter,
3638
}
3739
}
3840

src/nuxt.ts

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
1-
// Workaround for:
2-
// src/nuxt.ts(5,1): error TS2742: The inferred type of 'default' cannot be named without a reference to '.pnpm/@[email protected][email protected]/node_modules/@nuxt/schema'. This is likely not portable. A type annotation is necessary.
3-
import type {} from '@nuxt/schema'
41
import type { Options } from './types'
5-
import { addVitePlugin, addWebpackPlugin, defineNuxtModule } from '@nuxt/kit'
2+
import { addTemplate, addVitePlugin, addWebpackPlugin, defineNuxtModule } from '@nuxt/kit'
63
import unplugin from '.'
74
import { getHeadLinkTags } from './loaders'
5+
import { customVirtualModule } from './loaders/custom'
86
import { fontsourceImports } from './loaders/fontsource'
97

108
export default defineNuxtModule({
@@ -15,18 +13,22 @@ export default defineNuxtModule({
1513
setup(options: Options, nuxt) {
1614
if ('fontsource' in options || 'custom' in options) {
1715
nuxt.options.css ||= []
18-
nuxt.options.css.push('unfonts.css')
19-
if ('fontsource' in options) {
16+
if (options.fontsource) {
2017
for (const src of fontsourceImports(options.fontsource))
2118
nuxt.options.css.push(src)
19+
}
20+
21+
if (options.custom) {
22+
nuxt.options.css.push('#build/unfonts.css')
23+
options.custom.prefetchPrefix = nuxt.options.runtimeConfig.app.buildAssetsDir
2224

23-
delete options.fontsource
25+
addTemplate({
26+
filename: 'unfonts.css',
27+
getContents: () => customVirtualModule(options.custom!, nuxt.options.rootDir),
28+
})
2429
}
2530
}
2631

27-
if (options.custom)
28-
options.custom.prefetchPrefix = nuxt.options.runtimeConfig.app.buildAssetsDir
29-
3032
const links = getHeadLinkTags(options)
3133

3234
nuxt.options.app.head ||= {}

tsup.config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,5 @@ export default <Options>{
1212
format: ['cjs', 'esm'],
1313
dts: true,
1414
onSuccess: 'npm run build:fix',
15+
external: ['@nuxt/schema', '@nuxt/kit'],
1516
}

0 commit comments

Comments
 (0)