From 5f1f9aac5a8f831c083272c83e733c2f963096ea Mon Sep 17 00:00:00 2001 From: Dunqing Date: Thu, 5 Feb 2026 22:49:21 +0800 Subject: [PATCH] Fix v3 config loading with Jiti re-exports --- src/versions/v3.ts | 15 +++++---- tests/fixtures.test.ts | 5 +++ tests/fixtures/v3-jiti-reexport/index.html | 1 + tests/fixtures/v3-jiti-reexport/output.html | 1 + .../v3-jiti-reexport/package-lock.json | 32 +++++++++++++++++++ tests/fixtures/v3-jiti-reexport/package.json | 6 ++++ .../packages/tailwind-config/dist/index.mjs | 11 +++++++ .../packages/tailwind-config/package.json | 17 ++++++++++ .../packages/tailwind-config/src/index.ts | 3 ++ .../v3-jiti-reexport/tailwind.config.mjs | 1 + 10 files changed, 86 insertions(+), 6 deletions(-) create mode 100644 tests/fixtures/v3-jiti-reexport/index.html create mode 100644 tests/fixtures/v3-jiti-reexport/output.html create mode 100644 tests/fixtures/v3-jiti-reexport/package-lock.json create mode 100644 tests/fixtures/v3-jiti-reexport/package.json create mode 100644 tests/fixtures/v3-jiti-reexport/packages/tailwind-config/dist/index.mjs create mode 100644 tests/fixtures/v3-jiti-reexport/packages/tailwind-config/package.json create mode 100644 tests/fixtures/v3-jiti-reexport/packages/tailwind-config/src/index.ts create mode 100644 tests/fixtures/v3-jiti-reexport/tailwind.config.mjs diff --git a/src/versions/v3.ts b/src/versions/v3.ts index fec9b15..4f164a2 100644 --- a/src/versions/v3.ts +++ b/src/versions/v3.ts @@ -1,11 +1,12 @@ // @ts-check import * as path from 'node:path' +import { pathToFileURL } from 'node:url' import clearModule from 'clear-module' +import { createJiti } from 'jiti' // @ts-ignore import { generateRules as generateRulesFallback } from 'tailwindcss-v3/lib/lib/generateRules' // @ts-ignore import { createContext as createContextFallback } from 'tailwindcss-v3/lib/lib/setupContextUtils' -import loadConfigFallback from 'tailwindcss-v3/loadConfig' import resolveConfigFallback from 'tailwindcss-v3/resolveConfig' import type { RequiredConfig } from 'tailwindcss-v3/types/config.js' import type { UnifiedApi } from '../types' @@ -36,7 +37,6 @@ export async function loadV3(pkgDir: string | null, jsConfig: string | null): Pr let createContext = createContextFallback let generateRules: GenerateRules = generateRulesFallback let resolveConfig = resolveConfigFallback - let loadConfig = loadConfigFallback let tailwindConfig: RequiredConfig = { content: [] } try { @@ -44,16 +44,19 @@ export async function loadV3(pkgDir: string | null, jsConfig: string | null): Pr resolveConfig = require(path.join(pkgDir, 'resolveConfig')) createContext = require(path.join(pkgDir, 'lib/lib/setupContextUtils')).createContext generateRules = require(path.join(pkgDir, 'lib/lib/generateRules')).generateRules - // Prior to `tailwindcss@3.3.0` this won't exist so we load it last - loadConfig = require(path.join(pkgDir, 'loadConfig')) } } catch {} try { if (jsConfig) { clearModule(jsConfig) - let loadedConfig = loadConfig(jsConfig) - tailwindConfig = loadedConfig.default ?? loadedConfig + let jiti = createJiti(import.meta.url, { + moduleCache: false, + fsCache: false, + interopDefault: true, + }) + let url = pathToFileURL(jsConfig) + tailwindConfig = await jiti.import(url.href, { default: true }) } } catch (err) { console.error(`Unable to load your Tailwind CSS v3 config: ${jsConfig}`) diff --git a/tests/fixtures.test.ts b/tests/fixtures.test.ts index e810a39..5c8c9a6 100644 --- a/tests/fixtures.test.ts +++ b/tests/fixtures.test.ts @@ -61,6 +61,11 @@ let fixtures = [ dir: 'v3-2', ext: 'html', }, + { + name: 'v3: re-exported config with jiti', + dir: 'v3-jiti-reexport', + ext: 'html', + }, { name: 'plugins', dir: 'plugins', diff --git a/tests/fixtures/v3-jiti-reexport/index.html b/tests/fixtures/v3-jiti-reexport/index.html new file mode 100644 index 0000000..7593a7e --- /dev/null +++ b/tests/fixtures/v3-jiti-reexport/index.html @@ -0,0 +1 @@ +
diff --git a/tests/fixtures/v3-jiti-reexport/output.html b/tests/fixtures/v3-jiti-reexport/output.html new file mode 100644 index 0000000..04a62c8 --- /dev/null +++ b/tests/fixtures/v3-jiti-reexport/output.html @@ -0,0 +1 @@ +
diff --git a/tests/fixtures/v3-jiti-reexport/package-lock.json b/tests/fixtures/v3-jiti-reexport/package-lock.json new file mode 100644 index 0000000..426d04e --- /dev/null +++ b/tests/fixtures/v3-jiti-reexport/package-lock.json @@ -0,0 +1,32 @@ +{ + "name": "v3-jiti-reexport", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "dependencies": { + "@repo/tailwind-config": "file:./packages/tailwind-config" + } + }, + "node_modules/@repo/tailwind-config": { + "resolved": "packages/tailwind-config", + "link": true + }, + "node_modules/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "packages/tailwind-config": { + "name": "@repo/tailwind-config", + "version": "1.0.0", + "dependencies": { + "jiti": "^2.6.1" + } + } + } +} diff --git a/tests/fixtures/v3-jiti-reexport/package.json b/tests/fixtures/v3-jiti-reexport/package.json new file mode 100644 index 0000000..6dba3f6 --- /dev/null +++ b/tests/fixtures/v3-jiti-reexport/package.json @@ -0,0 +1,6 @@ +{ + "private": true, + "dependencies": { + "@repo/tailwind-config": "file:./packages/tailwind-config" + } +} diff --git a/tests/fixtures/v3-jiti-reexport/packages/tailwind-config/dist/index.mjs b/tests/fixtures/v3-jiti-reexport/packages/tailwind-config/dist/index.mjs new file mode 100644 index 0000000..7f166d0 --- /dev/null +++ b/tests/fixtures/v3-jiti-reexport/packages/tailwind-config/dist/index.mjs @@ -0,0 +1,11 @@ +import { createJiti } from 'jiti' + +const jiti = createJiti(import.meta.url, { + interopDefault: true, +}) + +const _module = await jiti.import(new URL('../src/index.ts', import.meta.url).href, { + default: true, +}) + +export default _module?.default ?? _module diff --git a/tests/fixtures/v3-jiti-reexport/packages/tailwind-config/package.json b/tests/fixtures/v3-jiti-reexport/packages/tailwind-config/package.json new file mode 100644 index 0000000..935c709 --- /dev/null +++ b/tests/fixtures/v3-jiti-reexport/packages/tailwind-config/package.json @@ -0,0 +1,17 @@ +{ + "name": "@repo/tailwind-config", + "version": "1.0.0", + "type": "module", + "main": "./dist/index.mjs", + "module": "./dist/index.mjs", + "exports": { + ".": { + "import": "./dist/index.mjs", + "require": "./dist/index.mjs", + "default": "./dist/index.mjs" + } + }, + "dependencies": { + "jiti": "^2.6.1" + } +} diff --git a/tests/fixtures/v3-jiti-reexport/packages/tailwind-config/src/index.ts b/tests/fixtures/v3-jiti-reexport/packages/tailwind-config/src/index.ts new file mode 100644 index 0000000..ac0103b --- /dev/null +++ b/tests/fixtures/v3-jiti-reexport/packages/tailwind-config/src/index.ts @@ -0,0 +1,3 @@ +export default { + content: ['./index.html'], +} diff --git a/tests/fixtures/v3-jiti-reexport/tailwind.config.mjs b/tests/fixtures/v3-jiti-reexport/tailwind.config.mjs new file mode 100644 index 0000000..fc0231e --- /dev/null +++ b/tests/fixtures/v3-jiti-reexport/tailwind.config.mjs @@ -0,0 +1 @@ +export { default } from '@repo/tailwind-config'