diff --git a/src/TailwindCSSRspackPlugin.ts b/src/TailwindCSSRspackPlugin.ts index 8202c59..bd4296a 100644 --- a/src/TailwindCSSRspackPlugin.ts +++ b/src/TailwindCSSRspackPlugin.ts @@ -1,4 +1,5 @@ -import { mkdir, writeFile } from 'node:fs/promises'; +import { mkdtemp, writeFile } from 'node:fs/promises'; +import { tmpdir } from 'node:os'; import path from 'node:path'; import { pathToFileURL } from 'node:url'; @@ -184,13 +185,14 @@ class TailwindRspackPluginImpl { : // biome-ignore lint/style/noNonNullAssertion: should have context path.resolve(this.compiler.options.context!, this.options.config); - const outputDir = path.resolve( - // biome-ignore lint/style/noNonNullAssertion: should have `output.path` - this.compiler.options.output.path!, - '.rsbuild', - entryName, - ); - await mkdir(outputDir, { recursive: true }); + const outputDir = DEBUG + ? path.resolve( + // biome-ignore lint/style/noNonNullAssertion: should have `output.path` + this.compiler.options.output.path!, + '.rsbuild', + entryName, + ) + : await mkdtemp(path.join(tmpdir(), entryName)); const configPath = path.resolve(outputDir, 'tailwind.config.mjs'); @@ -220,3 +222,14 @@ function collectModules( entryModules.add(module.resource); } } + +const DEBUG = (function isDebug() { + if (!process.env.DEBUG) { + return false; + } + + const values = process.env.DEBUG.toLocaleLowerCase().split(','); + return ['rsbuild', 'rsbuild:tailwind', 'rsbuild:*', '*'].some((key) => + values.includes(key), + ); +})(); diff --git a/test/basic/index.test.ts b/test/basic/index.test.ts index 536cd9c..f577e1f 100644 --- a/test/basic/index.test.ts +++ b/test/basic/index.test.ts @@ -1,4 +1,5 @@ -import { dirname } from 'node:path'; +import { existsSync } from 'node:fs'; +import { dirname, resolve } from 'node:path'; import { fileURLToPath } from 'node:url'; import { expect, test } from '@playwright/test'; import { createRsbuild } from '@rsbuild/core'; @@ -64,3 +65,16 @@ test('should build with tailwind utilities', async ({ page }) => { await server.close(); }); + +test('should not generate tailwind.config.js in dist/', async () => { + const rsbuild = await createRsbuild({ + cwd: __dirname, + rsbuildConfig: { + plugins: [pluginTailwindCSS()], + }, + }); + + await rsbuild.build(); + + expect(existsSync(resolve(__dirname, './dist/.rsbuild'))).toBeFalsy(); +});