diff --git a/packages/cli/src/__tests__/pack.spec.ts b/packages/cli/src/__tests__/pack.spec.ts index f8e66b5c4a..5f4aab804a 100644 --- a/packages/cli/src/__tests__/pack.spec.ts +++ b/packages/cli/src/__tests__/pack.spec.ts @@ -1,3 +1,8 @@ +import { existsSync, mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs'; +import { createRequire } from 'node:module'; +import { tmpdir } from 'node:os'; +import { join } from 'node:path'; + import { expect, test } from 'vitest'; // `vite-plus/pack` re-exports the tsdown build bundled into core, so it must keep tsdown's runtime API. @@ -8,3 +13,33 @@ test('exposes every tsdown value export from vite-plus/pack', async () => { const missing = expected.filter((key) => (pack as Record)[key] === undefined); expect(missing, 'tsdown value exports missing from vite-plus/pack').toEqual([]); }); + +test('builds each workspace member in its own directory with member configs disabled', async ({ + onTestFinished, +}) => { + const { build } = await import('../pack.js'); + const root = mkdtempSync(join(tmpdir(), 'vp-pack-workspace-')); + onTestFinished(() => rmSync(root, { recursive: true, force: true })); + writeFileSync(join(root, 'index.js'), 'export default 99'); + + for (const [name, value] of Object.entries({ a: 11, b: 55 })) { + const member = join(root, 'packages', name); + mkdirSync(member, { recursive: true }); + writeFileSync(join(member, 'index.js'), `export default ${value}`); + writeFileSync(join(member, 'tsdown.config.mjs'), 'throw new Error("member config loaded")'); + } + + await build({ + cwd: root, + workspace: { include: 'packages/*', config: false }, + entry: ['index.js'], + format: 'cjs', + fixedExtension: true, + dts: false, + }); + + const require = createRequire(join(root, 'package.json')); + expect(require('./packages/a/dist/index.cjs')).toBe(11); + expect(require('./packages/b/dist/index.cjs')).toBe(55); + expect(existsSync(join(root, 'dist'))).toBe(false); +}); diff --git a/patches/tsdown@0.23.4.patch b/patches/tsdown@0.23.4.patch new file mode 100644 index 0000000000..9b8343e015 --- /dev/null +++ b/patches/tsdown@0.23.4.patch @@ -0,0 +1,7 @@ +diff --git a/dist/build-wv1dWHDH.mjs b/dist/build-wv1dWHDH.mjs +--- a/dist/build-wv1dWHDH.mjs ++++ b/dist/build-wv1dWHDH.mjs +@@ -75,1 +75,2 @@ async function resolveWorkspace(config, inlineConfig, context, rootDeps) { +- debug$5("loading workspace config %s", cwd); ++ if (workspaceConfig === false) return [mergeConfig(normalized, { cwd })]; ++ debug$5("loading workspace config %s", cwd); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6b3d1ab020..da6925adc9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -380,6 +380,7 @@ patchedDependencies: chokidar@3.6.0: e17269188c54412478078f7ac7877c1d5a475a2f2438328e3a7e725513ccbf1f dotenv-expand@13.0.0: 49330a663821151418e003e822a82a6a61d2f0f8a6e3cab00c1c94815a112889 sirv@3.0.2: c07c56eb72faea34341d465cde2314e89db472106ed378181e3447893af6bf95 + tsdown@0.23.4: e4a14b5b8d11ff53429745bd3d630d752ac471b33fd53b7bf49bf58f5f497536 importers: @@ -544,7 +545,7 @@ importers: version: 0.2.17 tsdown: specifier: 'catalog:' - version: 0.23.4(@arethetypeswrong/core@0.18.2)(@tsdown/css@0.23.4)(@tsdown/exe@0.23.4)(@typescript/native-preview@7.0.0-dev.20260707.2)(@vitejs/devtools@0.8.0(crossws@0.4.12(srvx@1.0.6))(srvx@1.0.6)(vite@packages+core))(@volar/typescript@2.4.28)(@vue/language-core@3.3.12)(oxc-resolver@11.24.2)(publint@0.3.24)(tsx@4.23.15)(typescript@7.0.2)(unplugin-unused@0.5.6)(unrun@0.3.1)(vue-tsc@3.3.12(typescript@7.0.2)) + version: 0.23.4(patch_hash=e4a14b5b8d11ff53429745bd3d630d752ac471b33fd53b7bf49bf58f5f497536)(@arethetypeswrong/core@0.18.2)(@tsdown/css@0.23.4)(@tsdown/exe@0.23.4)(@typescript/native-preview@7.0.0-dev.20260707.2)(@vitejs/devtools@0.8.0(crossws@0.4.12(srvx@1.0.6))(srvx@1.0.6)(vite@packages+core))(@volar/typescript@2.4.28)(@vue/language-core@3.3.12)(oxc-resolver@11.24.2)(publint@0.3.24)(tsx@4.23.15)(typescript@7.0.2)(unplugin-unused@0.5.6)(unrun@0.3.1)(vue-tsc@3.3.12(typescript@7.0.2)) validate-npm-package-name: specifier: 'catalog:' version: 8.0.0 @@ -701,7 +702,7 @@ importers: version: 1.2.2 tsdown: specifier: 'catalog:' - version: 0.23.4(@arethetypeswrong/core@0.18.2)(@tsdown/css@0.23.4)(@tsdown/exe@0.23.4)(@typescript/native-preview@7.0.0-dev.20260707.2)(@vitejs/devtools@0.8.0(crossws@0.4.12(srvx@1.0.6))(srvx@1.0.6)(vite@packages+core))(@volar/typescript@2.4.28)(@vue/language-core@3.3.12)(oxc-resolver@11.24.2)(publint@0.3.24)(tsx@4.23.15)(typescript@7.0.2)(unplugin-unused@0.5.6)(unrun@0.3.1)(vue-tsc@3.3.12(typescript@7.0.2)) + version: 0.23.4(patch_hash=e4a14b5b8d11ff53429745bd3d630d752ac471b33fd53b7bf49bf58f5f497536)(@arethetypeswrong/core@0.18.2)(@tsdown/css@0.23.4)(@tsdown/exe@0.23.4)(@typescript/native-preview@7.0.0-dev.20260707.2)(@vitejs/devtools@0.8.0(crossws@0.4.12(srvx@1.0.6))(srvx@1.0.6)(vite@packages+core))(@volar/typescript@2.4.28)(@vue/language-core@3.3.12)(oxc-resolver@11.24.2)(publint@0.3.24)(tsx@4.23.15)(typescript@7.0.2)(unplugin-unused@0.5.6)(unrun@0.3.1)(vue-tsc@3.3.12(typescript@7.0.2)) typescript: specifier: 'catalog:' version: 7.0.2 @@ -742,7 +743,7 @@ importers: version: 2.1.0 tsdown: specifier: 'catalog:' - version: 0.23.4(@arethetypeswrong/core@0.18.2)(@tsdown/css@0.23.4)(@tsdown/exe@0.23.4)(@typescript/native-preview@7.0.0-dev.20260707.2)(@vitejs/devtools@0.8.0(crossws@0.4.12(srvx@1.0.6))(srvx@1.0.6)(vite@packages+core))(@volar/typescript@2.4.28)(@vue/language-core@3.3.12)(oxc-resolver@11.24.2)(publint@0.3.24)(tsx@4.23.15)(typescript@7.0.2)(unplugin-unused@0.5.6)(unrun@0.3.1)(vue-tsc@3.3.12(typescript@7.0.2)) + version: 0.23.4(patch_hash=e4a14b5b8d11ff53429745bd3d630d752ac471b33fd53b7bf49bf58f5f497536)(@arethetypeswrong/core@0.18.2)(@tsdown/css@0.23.4)(@tsdown/exe@0.23.4)(@typescript/native-preview@7.0.0-dev.20260707.2)(@vitejs/devtools@0.8.0(crossws@0.4.12(srvx@1.0.6))(srvx@1.0.6)(vite@packages+core))(@volar/typescript@2.4.28)(@vue/language-core@3.3.12)(oxc-resolver@11.24.2)(publint@0.3.24)(tsx@4.23.15)(typescript@7.0.2)(unplugin-unused@0.5.6)(unrun@0.3.1)(vue-tsc@3.3.12(typescript@7.0.2)) packages/tools: devDependencies: @@ -8878,7 +8879,7 @@ snapshots: lightningcss: 1.33.0 postcss-load-config: 6.0.1(jiti@2.7.0)(postcss@8.5.31)(tsx@4.23.15)(yaml@2.9.1) rolldown: link:rolldown/packages/rolldown - tsdown: 0.23.4(@arethetypeswrong/core@0.18.2)(@tsdown/css@0.23.4)(@tsdown/exe@0.23.4)(@typescript/native-preview@7.0.0-dev.20260707.2)(@vitejs/devtools@0.8.0(crossws@0.4.12(srvx@1.0.6))(srvx@1.0.6)(vite@packages+core))(@volar/typescript@2.4.28)(@vue/language-core@3.3.12)(oxc-resolver@11.24.2)(publint@0.3.24)(tsx@4.23.15)(typescript@7.0.2)(unplugin-unused@0.5.6)(unrun@0.3.1)(vue-tsc@3.3.12(typescript@7.0.2)) + tsdown: 0.23.4(patch_hash=e4a14b5b8d11ff53429745bd3d630d752ac471b33fd53b7bf49bf58f5f497536)(@arethetypeswrong/core@0.18.2)(@tsdown/css@0.23.4)(@tsdown/exe@0.23.4)(@typescript/native-preview@7.0.0-dev.20260707.2)(@vitejs/devtools@0.8.0(crossws@0.4.12(srvx@1.0.6))(srvx@1.0.6)(vite@packages+core))(@volar/typescript@2.4.28)(@vue/language-core@3.3.12)(oxc-resolver@11.24.2)(publint@0.3.24)(tsx@4.23.15)(typescript@7.0.2)(unplugin-unused@0.5.6)(unrun@0.3.1)(vue-tsc@3.3.12(typescript@7.0.2)) optionalDependencies: postcss: 8.5.31 postcss-import: 16.2.0(postcss@8.5.31) @@ -8894,7 +8895,7 @@ snapshots: dependencies: obug: 3.0.0 tinyexec: 1.3.1 - tsdown: 0.23.4(@arethetypeswrong/core@0.18.2)(@tsdown/css@0.23.4)(@tsdown/exe@0.23.4)(@typescript/native-preview@7.0.0-dev.20260707.2)(@vitejs/devtools@0.8.0(crossws@0.4.12(srvx@1.0.6))(srvx@1.0.6)(vite@packages+core))(@volar/typescript@2.4.28)(@vue/language-core@3.3.12)(oxc-resolver@11.24.2)(publint@0.3.24)(tsx@4.23.15)(typescript@7.0.2)(unplugin-unused@0.5.6)(unrun@0.3.1)(vue-tsc@3.3.12(typescript@7.0.2)) + tsdown: 0.23.4(patch_hash=e4a14b5b8d11ff53429745bd3d630d752ac471b33fd53b7bf49bf58f5f497536)(@arethetypeswrong/core@0.18.2)(@tsdown/css@0.23.4)(@tsdown/exe@0.23.4)(@typescript/native-preview@7.0.0-dev.20260707.2)(@vitejs/devtools@0.8.0(crossws@0.4.12(srvx@1.0.6))(srvx@1.0.6)(vite@packages+core))(@volar/typescript@2.4.28)(@vue/language-core@3.3.12)(oxc-resolver@11.24.2)(publint@0.3.24)(tsx@4.23.15)(typescript@7.0.2)(unplugin-unused@0.5.6)(unrun@0.3.1)(vue-tsc@3.3.12(typescript@7.0.2)) verkit: 0.5.0 '@tybys/wasm-util@0.10.3': @@ -12001,7 +12002,7 @@ snapshots: typescript: 7.0.2 optional: true - tsdown@0.23.4(@arethetypeswrong/core@0.18.2)(@tsdown/css@0.23.4)(@tsdown/exe@0.23.4)(@typescript/native-preview@7.0.0-dev.20260707.2)(@vitejs/devtools@0.8.0(crossws@0.4.12(srvx@1.0.6))(srvx@1.0.6)(vite@packages+core))(@volar/typescript@2.4.28)(@vue/language-core@3.3.12)(oxc-resolver@11.24.2)(publint@0.3.24)(tsx@4.23.15)(typescript@7.0.2)(unplugin-unused@0.5.6)(unrun@0.3.1)(vue-tsc@3.3.12(typescript@7.0.2)): + tsdown@0.23.4(patch_hash=e4a14b5b8d11ff53429745bd3d630d752ac471b33fd53b7bf49bf58f5f497536)(@arethetypeswrong/core@0.18.2)(@tsdown/css@0.23.4)(@tsdown/exe@0.23.4)(@typescript/native-preview@7.0.0-dev.20260707.2)(@vitejs/devtools@0.8.0(crossws@0.4.12(srvx@1.0.6))(srvx@1.0.6)(vite@packages+core))(@volar/typescript@2.4.28)(@vue/language-core@3.3.12)(oxc-resolver@11.24.2)(publint@0.3.24)(tsx@4.23.15)(typescript@7.0.2)(unplugin-unused@0.5.6)(unrun@0.3.1)(vue-tsc@3.3.12(typescript@7.0.2)): dependencies: cac: 7.1.0 defu: 6.1.7 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 41ca2b670d..ec67230ed9 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -174,6 +174,7 @@ packageExtensions: dependencies: typescript: ~6.0.3 patchedDependencies: + tsdown@0.23.4: patches/tsdown@0.23.4.patch chokidar@3.6.0: vite/patches/chokidar@3.6.0.patch dotenv-expand@13.0.0: vite/patches/dotenv-expand@13.0.0.patch sirv@3.0.2: vite/patches/sirv@3.0.2.patch