From a1ca296fc013f874682a388277eaba75794bd8ff Mon Sep 17 00:00:00 2001 From: xingyu4j Date: Sun, 15 Mar 2026 19:40:09 +0800 Subject: [PATCH] chore(node-utils): migrate build to tsdown --- internal/node-utils/build.config.ts | 7 ----- internal/node-utils/package.json | 5 ++-- internal/node-utils/scripts/build.mjs | 37 +++++++++++++++++++++++++ internal/node-utils/src/date.ts | 4 +-- internal/node-utils/src/monorepo.ts | 15 ++++++---- internal/node-utils/tsconfig.build.json | 8 ++++++ internal/node-utils/tsdown.config.ts | 10 +++++++ 7 files changed, 69 insertions(+), 17 deletions(-) delete mode 100644 internal/node-utils/build.config.ts create mode 100644 internal/node-utils/scripts/build.mjs create mode 100644 internal/node-utils/tsconfig.build.json create mode 100644 internal/node-utils/tsdown.config.ts diff --git a/internal/node-utils/build.config.ts b/internal/node-utils/build.config.ts deleted file mode 100644 index 97e572c56..000000000 --- a/internal/node-utils/build.config.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { defineBuildConfig } from 'unbuild'; - -export default defineBuildConfig({ - clean: true, - declaration: true, - entries: ['src/index'], -}); diff --git a/internal/node-utils/package.json b/internal/node-utils/package.json index 40a017f14..bd0e1f258 100644 --- a/internal/node-utils/package.json +++ b/internal/node-utils/package.json @@ -12,7 +12,8 @@ "license": "MIT", "type": "module", "scripts": { - "stub": "pnpm unbuild --stub" + "build": "node ./scripts/build.mjs", + "stub": "node ./scripts/build.mjs" }, "files": [ "dist" @@ -22,7 +23,7 @@ "types": "./dist/index.d.ts", "exports": { ".": { - "types": "./src/index.ts", + "types": "./dist/index.d.ts", "import": "./dist/index.mjs", "default": "./dist/index.mjs" } diff --git a/internal/node-utils/scripts/build.mjs b/internal/node-utils/scripts/build.mjs new file mode 100644 index 000000000..0b13a14ca --- /dev/null +++ b/internal/node-utils/scripts/build.mjs @@ -0,0 +1,37 @@ +import { spawnSync } from 'node:child_process'; + +const pnpmCommand = + process.env.npm_execpath && + process.env.npm_execpath.endsWith('.cjs') + ? [process.execPath, process.env.npm_execpath] + : [process.platform === 'win32' ? 'pnpm.cmd' : 'pnpm']; + +const steps = [ + ['exec', 'tsdown', '--no-dts'], + [ + 'exec', + 'tsc', + '-p', + 'tsconfig.build.json', + '--emitDeclarationOnly', + '--declaration', + '--outDir', + 'dist', + ], +]; + +for (const args of steps) { + const [command, ...commandArgs] = pnpmCommand; + const result = spawnSync(command, [...commandArgs, ...args], { + shell: false, + stdio: 'inherit', + }); + + if (result.error) { + throw result.error; + } + + if (result.status !== 0) { + process.exit(result.status ?? 1); + } +} diff --git a/internal/node-utils/src/date.ts b/internal/node-utils/src/date.ts index d36572d97..7b11583f3 100644 --- a/internal/node-utils/src/date.ts +++ b/internal/node-utils/src/date.ts @@ -1,6 +1,6 @@ import dayjs from 'dayjs'; -import timezone from 'dayjs/plugin/timezone'; -import utc from 'dayjs/plugin/utc'; +import timezone from 'dayjs/plugin/timezone.js'; +import utc from 'dayjs/plugin/utc.js'; dayjs.extend(utc); dayjs.extend(timezone); diff --git a/internal/node-utils/src/monorepo.ts b/internal/node-utils/src/monorepo.ts index b6373e78b..d0c384f50 100644 --- a/internal/node-utils/src/monorepo.ts +++ b/internal/node-utils/src/monorepo.ts @@ -1,10 +1,13 @@ +import type { Package } from '@manypkg/get-packages'; + import { dirname } from 'node:path'; -import { - getPackages as getPackagesFunc, - getPackagesSync as getPackagesSyncFunc, -} from '@manypkg/get-packages'; -import { findUpSync } from 'find-up'; +import * as manypkg from '@manypkg/get-packages'; +import * as findUp from 'find-up'; + +const { getPackages: getPackagesFunc, getPackagesSync: getPackagesSyncFunc } = + manypkg; +const { findUpSync } = findUp; /** * 查找大仓的根目录 @@ -40,7 +43,7 @@ async function getPackages() { */ async function getPackage(pkgName: string) { const { packages } = await getPackages(); - return packages.find((pkg) => pkg.packageJson.name === pkgName); + return packages.find((pkg: Package) => pkg.packageJson.name === pkgName); } export { findMonorepoRoot, getPackage, getPackages, getPackagesSync }; diff --git a/internal/node-utils/tsconfig.build.json b/internal/node-utils/tsconfig.build.json new file mode 100644 index 000000000..b62e0ab6b --- /dev/null +++ b/internal/node-utils/tsconfig.build.json @@ -0,0 +1,8 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "extends": "./tsconfig.json", + "compilerOptions": { + "noEmit": false + }, + "exclude": ["node_modules", "src/__tests__"] +} diff --git a/internal/node-utils/tsdown.config.ts b/internal/node-utils/tsdown.config.ts new file mode 100644 index 000000000..4a607e00c --- /dev/null +++ b/internal/node-utils/tsdown.config.ts @@ -0,0 +1,10 @@ +import { defineConfig } from 'tsdown'; + +export default defineConfig({ + clean: false, + deps: { + skipNodeModulesBundle: true, + }, + entry: ['src/index.ts'], + format: ['esm'], +});