diff --git a/src/core/builders/vite/plugins/devHtmlPrerender.ts b/src/core/builders/vite/plugins/devHtmlPrerender.ts index 39deea5f..81de65d7 100644 --- a/src/core/builders/vite/plugins/devHtmlPrerender.ts +++ b/src/core/builders/vite/plugins/devHtmlPrerender.ts @@ -16,8 +16,8 @@ export function devHtmlPrerender( ): vite.PluginOption { const htmlReloadId = '@wxt/reload-html'; const resolvedHtmlReloadId = resolve( - config.root, - 'node_modules/wxt/dist/virtual/reload-html.js', + config.wxtModuleDir, + 'dist/virtual/reload-html.js', ); const virtualReactRefreshId = '@wxt/virtual-react-refresh'; const resolvedVirtualReactRefreshId = '\0' + virtualReactRefreshId; diff --git a/src/core/builders/vite/plugins/virtualEntrypoint.ts b/src/core/builders/vite/plugins/virtualEntrypoint.ts index f0b64595..12a9ab5a 100644 --- a/src/core/builders/vite/plugins/virtualEntrypoint.ts +++ b/src/core/builders/vite/plugins/virtualEntrypoint.ts @@ -30,10 +30,7 @@ export function virtualEntrypoint( const inputPath = id.replace(resolvedVirtualId, ''); const template = await fs.readFile( - resolve( - config.root, - `node_modules/wxt/dist/virtual/${type}-entrypoint.js`, - ), + resolve(config.wxtModuleDir, `dist/virtual/${type}-entrypoint.js`), 'utf-8', ); return template.replace(`virtual:user-${type}`, inputPath); diff --git a/src/core/builders/vite/plugins/webextensionPolyfillMock.ts b/src/core/builders/vite/plugins/webextensionPolyfillMock.ts index 1d6103a3..8ef41e9e 100644 --- a/src/core/builders/vite/plugins/webextensionPolyfillMock.ts +++ b/src/core/builders/vite/plugins/webextensionPolyfillMock.ts @@ -26,8 +26,8 @@ export function webextensionPolyfillMock( alias: { // Alias to use a mocked version of the polyfill 'webextension-polyfill': path.resolve( - config.root, - 'node_modules/wxt/dist/virtual/mock-browser', + config.wxtModuleDir, + 'dist/virtual/mock-browser', ), }, }, diff --git a/src/core/utils/building/import-entrypoint.ts b/src/core/utils/building/import-entrypoint.ts index 5ffec7e5..0426a7f5 100644 --- a/src/core/utils/building/import-entrypoint.ts +++ b/src/core/utils/building/import-entrypoint.ts @@ -52,8 +52,8 @@ export async function importEntrypointFile(path: string): Promise { esmResolve: true, alias: { 'webextension-polyfill': resolve( - wxt.config.root, - 'node_modules/wxt/dist/virtual/mock-browser.js', + wxt.config.wxtModuleDir, + 'dist/virtual/mock-browser.js', ), }, // Continue using node to load TS files even if `bun run --bun` is detected. Jiti does not diff --git a/src/core/utils/building/resolve-config.ts b/src/core/utils/building/resolve-config.ts index 9400e82a..d78611ee 100644 --- a/src/core/utils/building/resolve-config.ts +++ b/src/core/utils/building/resolve-config.ts @@ -71,6 +71,7 @@ export async function resolveConfig( inlineConfig.root ?? userConfig.root ?? process.cwd(), ); const wxtDir = path.resolve(root, '.wxt'); + const wxtModuleDir = path.resolve(root, 'node_modules/wxt'); const srcDir = path.resolve(root, mergedConfig.srcDir ?? root); const entrypointsDir = path.resolve( srcDir, @@ -127,6 +128,7 @@ export async function resolveConfig( outBaseDir, outDir, publicDir, + wxtModuleDir, root, runnerConfig, srcDir, diff --git a/src/core/utils/testing/fake-objects.ts b/src/core/utils/testing/fake-objects.ts index e64d9161..54eba779 100644 --- a/src/core/utils/testing/fake-objects.ts +++ b/src/core/utils/testing/fake-objects.ts @@ -262,6 +262,7 @@ export const fakeResolvedConfig = fakeObjectCreator(() => { outDir: fakeDir(), publicDir: fakeDir(), root: fakeDir(), + wxtModuleDir: fakeDir(), runnerConfig: { config: {}, }, diff --git a/src/types/index.ts b/src/types/index.ts index 8a0fef42..63675390 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -963,6 +963,10 @@ export interface ResolvedConfig { outBaseDir: string; outDir: string; debug: boolean; + /** + * Directory pointing to `node_modules/wxt`, wherever WXT is installed. + */ + wxtModuleDir: string; mode: string; command: 'build' | 'serve'; browser: TargetBrowser;