diff --git a/packages/wxt/e2e/tests/dev.test.ts b/packages/wxt/e2e/tests/dev.test.ts new file mode 100644 index 00000000..c782bb94 --- /dev/null +++ b/packages/wxt/e2e/tests/dev.test.ts @@ -0,0 +1,24 @@ +import { describe, it, expect } from 'vitest'; +import { TestProject } from '../utils'; + +describe('Dev Mode', () => { + it('should not change ports when restarting the server', async () => { + const project = new TestProject(); + project.addFile( + 'entrypoints/background.ts', + 'export default defineBackground(() => {})', + ); + + const server = await project.startServer({ + runner: { + disabled: true, + }, + }); + const initialPort = server.port; + await server.restart(); + const finalPort = server.port; + await server.stop(); + + expect(finalPort).toBe(initialPort); + }); +}); diff --git a/packages/wxt/src/core/wxt.ts b/packages/wxt/src/core/wxt.ts index eaad5233..2c616b75 100644 --- a/packages/wxt/src/core/wxt.ts +++ b/packages/wxt/src/core/wxt.ts @@ -36,6 +36,14 @@ export async function registerWxt( return config.logger; }, async reloadConfig() { + // Prevent changing the server port when resolving config multiple times + // get-port-please doesn't always return the same port if it was recently closed. + if (wxt.config.dev.server?.port) { + inlineConfig.dev ??= {}; + inlineConfig.dev.server ??= {}; + inlineConfig.dev.server.port = wxt.config.dev.server.port; + } + wxt.config = await resolveConfig(inlineConfig, command); await wxt.hooks.callHook('config:resolved', wxt); },