Skip to content

Commit af96549

Browse files
authored
fix: webpack and rspack virtual file resolution (#3385)
1 parent e9b760e commit af96549

File tree

16 files changed

+2538
-599
lines changed

16 files changed

+2538
-599
lines changed

build.config.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,13 @@ import { defineBuildConfig } from 'unbuild'
22

33
export default defineBuildConfig({
44
entries: ['src/module'],
5-
externals: ['node:fs', 'node:url', 'webpack', '@babel/parser', 'unplugin-vue-router', 'unplugin-vue-router/options']
5+
externals: [
6+
'node:fs',
7+
'node:url',
8+
'webpack',
9+
'@rspack/core',
10+
'@babel/parser',
11+
'unplugin-vue-router',
12+
'unplugin-vue-router/options'
13+
]
614
})

internals.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ declare module '#internal/i18n/locale.detector.mjs' {
6262
export const localeDetector: LocaleDetector
6363
}
6464

65-
declare module 'virtual:nuxt-i18n-logger' {
65+
declare module '#nuxt-i18n/logger' {
6666
import type { ConsolaInstance } from 'consola'
6767

6868
export function createLogger(label: string): ConsolaInstance

package.json

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@
102102
"@intlify/unplugin-vue-i18n": "^6.0.3",
103103
"@intlify/utils": "^0.13.0",
104104
"@miyaneee/rollup-plugin-json5": "^1.2.0",
105-
"@nuxt/kit": "^3.15.4",
105+
"@nuxt/kit": "^3.16.0",
106106
"@oxc-parser/wasm": "^0.53.0",
107107
"@rollup/plugin-yaml": "^4.1.2",
108108
"@vue/compiler-sfc": "^3.5.13",
@@ -118,7 +118,7 @@
118118
"scule": "^1.1.1",
119119
"std-env": "^3.8.0",
120120
"ufo": "^1.3.1",
121-
"unplugin": "^1.10.1",
121+
"unplugin": "^2.2.0",
122122
"unplugin-vue-router": "^0.10.8",
123123
"vue-i18n": "^10.0.5",
124124
"vue-router": "^4.5.0"
@@ -127,7 +127,8 @@
127127
"@babel/types": "^7.24.7",
128128
"@eslint/js": "9.5.0",
129129
"@nuxt/module-builder": "^0.8.4",
130-
"@nuxt/schema": "^3.15.4",
130+
"@nuxt/schema": "^3.16.0",
131+
"@rspack/core": "^1.2.6",
131132
"@types/debug": "^4.1.9",
132133
"@types/eslint": "^8.56.6",
133134
"@unhead/vue": "^1.8.8",
@@ -146,7 +147,7 @@
146147
"lint-staged": "^15.2.7",
147148
"nitropack": "^2.9.7",
148149
"npm-run-all2": "^6.2.0",
149-
"nuxt": "^3.15.4",
150+
"nuxt": "^3.16.0",
150151
"ofetch": "^1.3.4",
151152
"playwright-core": "^1.45.3",
152153
"prettier": "^3.3.2",

pnpm-lock.yaml

Lines changed: 2365 additions & 469 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

specs/fixtures/empty_options/tsconfig.json

Lines changed: 0 additions & 4 deletions
This file was deleted.

specs/helper.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
// @ts-ignore
2+
import createJITI from 'jiti'
23
import { JSDOM } from 'jsdom'
34
import { expect } from 'vitest'
45
import { getBrowser, startServer, url, useTestContext } from './utils'
56
import { snakeCase } from 'scule'
7+
import { resolveAlias } from '@nuxt/kit'
68

79
import { errors, type BrowserContextOptions, type Page } from 'playwright-core'
810

@@ -208,9 +210,11 @@ export async function startServerWithRuntimeConfig(env: Record<string, unknown>)
208210

209211
export async function localeLoaderHelpers() {
210212
const ctx = useTestContext()
211-
const opts = await import(ctx.nuxt?.options.buildDir + '/i18n.options.mjs')
213+
const jiti = createJITI(ctx.nuxt!.options.rootDir, { alias: ctx.nuxt!.options.alias })
214+
const opts = await jiti.import(resolveAlias('#build/i18n.options.mjs'), {})
212215

213216
function findKey(code: string, ext: string, cache: boolean = false): string {
217+
// @ts-expect-error generated
214218
return opts.localeLoaders[code].find(x => x.cache === cache && x.key.includes(ext + '_'))!.key
215219
}
216220

src/bundler.ts

Lines changed: 39 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
/* eslint-disable @typescript-eslint/no-floating-promises */
22
import createDebug from 'debug'
33
import { resolve } from 'pathe'
4-
import { extendViteConfig, addWebpackPlugin, addBuildPlugin } from '@nuxt/kit'
4+
import { extendViteConfig, addWebpackPlugin, addBuildPlugin, addTemplate, addRspackPlugin } from '@nuxt/kit'
55
import VueI18nPlugin from '@intlify/unplugin-vue-i18n'
66
import { toArray } from './utils'
77
import { TransformMacroPlugin } from './transform/macros'
88
import { ResourcePlugin } from './transform/resource'
9-
import { i18nVirtualLoggerPlugin } from './virtual-logger'
109
import { TransformI18nFunctionPlugin } from './transform/i18n-function-injection'
10+
import { asI18nVirtual } from './transform/utils'
1111
import { getLayerLangPaths } from './layers'
1212

1313
import type { Nuxt } from '@nuxt/schema'
@@ -31,20 +31,38 @@ export async function extendBundler(ctx: I18nNuxtContext, nuxt: Nuxt) {
3131
sourcemap: !!nuxt.options.sourcemap.server || !!nuxt.options.sourcemap.client
3232
}
3333

34+
addTemplate({
35+
write: true,
36+
filename: 'nuxt-i18n-logger.mjs',
37+
getContents() {
38+
if (!ctx.options.debug) {
39+
return `export function createLogger() {}`
40+
}
41+
42+
return `
43+
import { createConsola } from 'consola'
44+
45+
const debugLogger = createConsola({ level: ${ctx.options.debug === 'verbose' ? 999 : 4} }).withTag('i18n')
46+
47+
export function createLogger(label) {
48+
return debugLogger.withTag(label)
49+
}`
50+
}
51+
})
52+
53+
nuxt.options.alias[asI18nVirtual('logger')] = ctx.resolver.resolve(nuxt.options.buildDir, './nuxt-i18n-logger.mjs')
54+
3455
/**
3556
* shared plugins (nuxt/nitro)
3657
*/
37-
const loggerPlugin = i18nVirtualLoggerPlugin(ctx.options.debug)
3858
const resourcePlugin = ResourcePlugin(sourceMapOptions, ctx)
3959

40-
addBuildPlugin(loggerPlugin)
4160
addBuildPlugin(resourcePlugin)
4261

4362
nuxt.hook('nitro:config', async cfg => {
4463
cfg.rollupConfig!.plugins = (await cfg.rollupConfig!.plugins) || []
4564
cfg.rollupConfig!.plugins = toArray(cfg.rollupConfig!.plugins)
4665

47-
cfg.rollupConfig!.plugins.push(loggerPlugin.rollup())
4866
cfg.rollupConfig!.plugins.push(resourcePlugin.rollup())
4967
})
5068

@@ -90,6 +108,22 @@ export async function extendBundler(ctx: I18nNuxtContext, nuxt: Nuxt) {
90108
debug((e as Error).message)
91109
}
92110

111+
/**
112+
* rspack plugin
113+
*/
114+
try {
115+
const { rspack } = await import('@rspack/core')
116+
117+
addRspackPlugin(
118+
new rspack.DefinePlugin({
119+
...getFeatureFlags(nuxtOptions.bundle),
120+
__DEBUG__: String(!!nuxtOptions.debug)
121+
})
122+
)
123+
} catch (e: unknown) {
124+
debug((e as Error).message)
125+
}
126+
93127
/**
94128
* vite plugin
95129
*/

src/constants.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ export const NUXT_I18N_COMPOSABLE_DEFINE_ROUTE = 'defineI18nRoute'
8989
export const NUXT_I18N_COMPOSABLE_DEFINE_LOCALE = 'defineI18nLocale'
9090
export const NUXT_I18N_COMPOSABLE_DEFINE_CONFIG = 'defineI18nConfig'
9191
export const NUXT_I18N_COMPOSABLE_DEFINE_LOCALE_DETECTOR = 'defineI18nLocaleDetector'
92-
export const NUXT_I18N_VIRTUAL_PREFIX = 'virtual:nuxt-i18n'
92+
export const NUXT_I18N_VIRTUAL_PREFIX = '#nuxt-i18n'
9393

9494
export const TS_EXTENSIONS = ['.ts', '.cts', '.mts']
9595
export const JS_EXTENSIONS = ['.js', '.cjs', '.mjs']

src/runtime/internal.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import {
1414
import { NUXT_I18N_MODULE_ID, DEFAULT_COOKIE_KEY, isSSG, localeCodes, normalizedLocales } from '#build/i18n.options.mjs'
1515
import { findBrowserLocale, getLocalesRegex, getRouteName } from './routing/utils'
1616
import { initCommonComposableOptions, type CommonComposableOptions } from './utils'
17-
import { createLogger } from 'virtual:nuxt-i18n-logger'
17+
import { createLogger } from '#nuxt-i18n/logger'
1818

1919
import type { Locale } from 'vue-i18n'
2020
import type { DetectBrowserLanguageOptions, LocaleObject } from '#internal-i18n-types'

src/runtime/messages.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { deepCopy, isFunction } from '@intlify/shared'
2-
import { createLogger } from 'virtual:nuxt-i18n-logger'
2+
import { createLogger } from '#nuxt-i18n/logger'
33

44
import type { I18nOptions, Locale, FallbackLocale, LocaleMessages, DefineLocaleMessage } from 'vue-i18n'
55
import type { NuxtApp } from '#app'

src/runtime/plugins/i18n.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import {
2525
} from '../internal'
2626
import { createLocaleFromRouteGetter, resolveBaseUrl } from '../routing/utils'
2727
import { extendI18n } from '../routing/i18n'
28-
import { createLogger } from 'virtual:nuxt-i18n-logger'
28+
import { createLogger } from '#nuxt-i18n/logger'
2929
import { getI18nTarget } from '../compatibility'
3030
import { resolveRoute } from '../routing/routing'
3131
import { localeHead } from '../routing/head'

src/runtime/plugins/route-locale-detect.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { unref } from 'vue'
22
import { hasPages } from '#build/i18n.options.mjs'
33
import { addRouteMiddleware, defineNuxtPlugin, defineNuxtRouteMiddleware } from '#imports'
4-
import { createLogger } from 'virtual:nuxt-i18n-logger'
4+
import { createLogger } from '#nuxt-i18n/logger'
55
import { makeFallbackLocaleCodes } from '../messages'
66
import { createLocaleFromRouteGetter } from '../routing/utils'
77
import { detectLocale, detectRedirect, loadAndSetLocale, navigate } from '../utils'

src/runtime/plugins/ssg-detect.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { unref } from 'vue'
22
import { isSSG } from '#build/i18n.options.mjs'
33
import { defineNuxtPlugin } from '#imports'
4-
import { createLogger } from 'virtual:nuxt-i18n-logger'
4+
import { createLogger } from '#nuxt-i18n/logger'
55
import { detectBrowserLanguage } from '../internal'
66
import type { NuxtApp } from '#app'
77

src/runtime/utils.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import {
1919
} from './internal'
2020
import { loadAndSetLocaleMessages, loadLocale, loadVueI18nOptions, makeFallbackLocaleCodes } from './messages'
2121
import { localePath, switchLocalePath } from './routing/routing'
22-
import { createLogger } from 'virtual:nuxt-i18n-logger'
22+
import { createLogger } from '#nuxt-i18n/logger'
2323
import { unref } from 'vue'
2424

2525
import type { I18n, Locale, I18nOptions } from 'vue-i18n'

src/transform/utils.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ export function asVirtualId(id: string, framework: UnpluginContextMeta['framewor
2121
}
2222

2323
export function asI18nVirtual(val: string) {
24-
return NUXT_I18N_VIRTUAL_PREFIX + '-' + val
24+
return NUXT_I18N_VIRTUAL_PREFIX + '/' + val
2525
}
2626

2727
// from https://github.com/nuxt/nuxt/blob/a80d1a0d6349bf1003666fc79a513c0d7370c931/packages/nuxt/src/core/utils/plugins.ts#L4-L35

0 commit comments

Comments
 (0)