diff --git a/.changeset/lemon-turkeys-happen.md b/.changeset/lemon-turkeys-happen.md new file mode 100644 index 00000000000..3405e2e23c5 --- /dev/null +++ b/.changeset/lemon-turkeys-happen.md @@ -0,0 +1,5 @@ +--- +'@module-federation/dts-plugin': patch +--- + +fix(dts-plugin): auto inject compiler output path to avoid duplicate zip file diff --git a/packages/dts-plugin/src/core/configurations/remotePlugin.test.ts b/packages/dts-plugin/src/core/configurations/remotePlugin.test.ts index 3bbe8e5ffbf..b3f4b245b9c 100644 --- a/packages/dts-plugin/src/core/configurations/remotePlugin.test.ts +++ b/packages/dts-plugin/src/core/configurations/remotePlugin.test.ts @@ -78,6 +78,7 @@ describe('hostPlugin', () => { implementation: '', generateAPITypes: false, context: process.cwd(), + outputDir: '', abortOnError: true, extractRemoteTypes: false, extractThirdParty: false, @@ -141,6 +142,7 @@ describe('hostPlugin', () => { generateAPITypes: false, implementation: '', context: process.cwd(), + outputDir: '', abortOnError: true, extractRemoteTypes: false, extractThirdParty: false, diff --git a/packages/dts-plugin/src/core/configurations/remotePlugin.ts b/packages/dts-plugin/src/core/configurations/remotePlugin.ts index ea96b10fd9d..a171131c638 100644 --- a/packages/dts-plugin/src/core/configurations/remotePlugin.ts +++ b/packages/dts-plugin/src/core/configurations/remotePlugin.ts @@ -22,6 +22,7 @@ const defaultOptions = { abortOnError: true, extractRemoteTypes: false, extractThirdParty: false, + outputDir: '', } satisfies Partial; function getEffectiveRootDir( @@ -59,6 +60,7 @@ const readTsConfig = ( compiledTypesFolder, context, additionalFilesToCompile, + outputDir, }: Required, mapComponentsToExpose: Record, ): TsConfigJson => { @@ -84,7 +86,7 @@ const readTsConfig = ( const outDir = resolve( context, - configContent.options.outDir || 'dist', + outputDir || configContent.options.outDir || 'dist', typesFolder, compiledTypesFolder, ); diff --git a/packages/dts-plugin/src/core/interfaces/RemoteOptions.ts b/packages/dts-plugin/src/core/interfaces/RemoteOptions.ts index b08718acf87..6cfb3d4e051 100644 --- a/packages/dts-plugin/src/core/interfaces/RemoteOptions.ts +++ b/packages/dts-plugin/src/core/interfaces/RemoteOptions.ts @@ -5,4 +5,5 @@ export interface RemoteOptions extends moduleFederationPlugin.DtsRemoteOptions { context?: string; implementation?: string; hostRemoteTypesFolder?: string; + outputDir?: string; } diff --git a/packages/dts-plugin/src/plugins/DevPlugin.ts b/packages/dts-plugin/src/plugins/DevPlugin.ts index 00a2bed980c..064fe6a9c6f 100644 --- a/packages/dts-plugin/src/plugins/DevPlugin.ts +++ b/packages/dts-plugin/src/plugins/DevPlugin.ts @@ -191,6 +191,10 @@ export class DevPlugin implements WebpackPluginInstance { ? undefined : normalizedDtsOptions.implementation, context: compiler.context, + outputDir: path.relative( + compiler.context, + compiler.outputPath || compiler.options.output.path, + ), moduleFederationConfig: { ...this._options, }, diff --git a/packages/dts-plugin/src/plugins/GenerateTypesPlugin.ts b/packages/dts-plugin/src/plugins/GenerateTypesPlugin.ts index 6cb0a941373..9059d36c967 100644 --- a/packages/dts-plugin/src/plugins/GenerateTypesPlugin.ts +++ b/packages/dts-plugin/src/plugins/GenerateTypesPlugin.ts @@ -10,6 +10,7 @@ import { generateTypes, generateTypesInChildProcess, retrieveTypesAssetsInfo, + type DTSManagerOptions, } from '../core/index'; import path from 'path'; @@ -42,10 +43,14 @@ export class GenerateTypesPlugin implements WebpackPluginInstance { return; } - const finalOptions = { + const finalOptions: DTSManagerOptions = { remote: { implementation: dtsOptions.implementation, context: compiler.context, + outputDir: path.relative( + compiler.context, + compiler.outputPath || compiler.options.output.path, + ), moduleFederationConfig: pluginOptions, ...normalizedGenerateTypes, }, @@ -74,8 +79,11 @@ export class GenerateTypesPlugin implements WebpackPluginInstance { const generateTypesFn = getGenerateTypesFn(); let compiledOnce = false; - const emitTypesFiles = async () => { + const emitTypesFilesDev = async () => { try { + if (!isDev()) { + return; + } const { zipTypesPath, apiTypesPath, zipName, apiFileName } = retrieveTypesAssetsInfo(finalOptions.remote); @@ -166,7 +174,7 @@ export class GenerateTypesPlugin implements WebpackPluginInstance { } if (compiledOnce) { - emitTypesFiles(); + emitTypesFilesDev(); return; }