fix: clean generated dist before workspace checks

This commit is contained in:
YBF
2026-09-03 10:29:13 +08:00
parent 116b28eef5
commit 3448ace12d
4 changed files with 24 additions and 18 deletions
+5 -4
View File
@@ -7,13 +7,14 @@
],
"type": "module",
"scripts": {
"dev": "node scripts/clean-dev-dist.mjs && pnpm run version:ensure && pnpm --filter @trade-message-center/onetalk-contract build && node scripts/with-build-hash.mjs --parallel --filter @trade-message-center/server --filter @trade-message-center/chrome-extension --filter @trade-message-center/mind-http-mock --if-present run dev",
"clean:dist": "node scripts/clean-generated-dist.mjs",
"dev": "pnpm run clean:dist && pnpm run version:ensure && pnpm --filter @trade-message-center/onetalk-contract build && node scripts/with-build-hash.mjs --parallel --filter @trade-message-center/server --filter @trade-message-center/chrome-extension --filter @trade-message-center/mind-http-mock --if-present run dev",
"dev:server": "pnpm --filter @trade-message-center/server run dev:watch",
"dev:extension": "pnpm run version:ensure && node scripts/with-build-hash.mjs --filter @trade-message-center/chrome-extension run dev",
"dev:mock": "pnpm --filter @trade-message-center/mind-http-mock run dev",
"build": "pnpm run version:ensure && node scripts/with-build-hash.mjs --filter @trade-message-center/onetalk-contract --filter @trade-message-center/server --filter @trade-message-center/chrome-extension --if-present run build",
"typecheck": "pnpm run version:ensure && pnpm --filter @trade-message-center/onetalk-contract --filter @trade-message-center/server --filter @trade-message-center/chrome-extension --filter @trade-message-center/mind-http-mock --if-present run typecheck",
"test": "pnpm run version:ensure && node --test scripts/package-version.test.mjs scripts/dev-startup.test.mjs && pnpm --filter @trade-message-center/onetalk-contract --filter @trade-message-center/server --filter @trade-message-center/chrome-extension --filter @trade-message-center/mind-http-mock --if-present run test",
"build": "pnpm run clean:dist && pnpm run version:ensure && node scripts/with-build-hash.mjs --filter @trade-message-center/onetalk-contract --filter @trade-message-center/server --filter @trade-message-center/chrome-extension --if-present run build",
"typecheck": "pnpm run clean:dist && pnpm run version:ensure && pnpm --filter @trade-message-center/onetalk-contract --filter @trade-message-center/server --filter @trade-message-center/chrome-extension --filter @trade-message-center/mind-http-mock --if-present run typecheck",
"test": "pnpm run clean:dist && pnpm run version:ensure && node --test scripts/package-version.test.mjs scripts/dev-startup.test.mjs && pnpm --filter @trade-message-center/onetalk-contract --filter @trade-message-center/server --filter @trade-message-center/chrome-extension --filter @trade-message-center/mind-http-mock --if-present run test",
"format": "oxfmt",
"format:check": "pnpm run version:ensure && oxfmt --check",
"version:sync": "node scripts/sync-package-versions.mjs",
@@ -1,19 +1,19 @@
// 清理开发启动前的 package dist
// 清理 workspace 的所有生成产物
import { rmSync } from "node:fs";
import { resolve } from "node:path";
import { fileURLToPath, pathToFileURL } from "node:url";
const workspaceDir = resolve(fileURLToPath(new URL(".", import.meta.url)), "..");
export const DEV_DIST_RELATIVE_PATHS = [
export const GENERATED_DIST_RELATIVE_PATHS = [
"apps/onetalk-contract/dist",
"apps/server/dist",
"apps/chrome-extension/dist",
"apps/mind-http-mock/dist",
];
export const cleanDevDist = (rootDir = workspaceDir) => {
for (const relativePath of DEV_DIST_RELATIVE_PATHS) {
export const cleanGeneratedDist = (rootDir = workspaceDir) => {
for (const relativePath of GENERATED_DIST_RELATIVE_PATHS) {
rmSync(resolve(rootDir, relativePath), { force: true, recursive: true });
}
};
@@ -21,10 +21,12 @@ export const cleanDevDist = (rootDir = workspaceDir) => {
const entryPath = process.argv[1];
const isMainModule = entryPath !== undefined && import.meta.url === pathToFileURL(entryPath).href;
/** 清理所有 workspace 包的开发生成产物。 */
/** 清理 workspace 包的 TypeScript 与 Vite 生成产物。 */
const run = () => {
cleanDevDist();
console.info(`[dev] cleaned ${DEV_DIST_RELATIVE_PATHS.length} package dist directories`);
cleanGeneratedDist();
console.info(
`[workspace] cleaned ${GENERATED_DIST_RELATIVE_PATHS.length} package dist directories`,
);
};
if (isMainModule) run();
+5 -5
View File
@@ -6,7 +6,7 @@ import { tmpdir } from "node:os";
import { join } from "node:path";
import test from "node:test";
import { cleanDevDist, DEV_DIST_RELATIVE_PATHS } from "./clean-dev-dist.mjs";
import { cleanGeneratedDist, GENERATED_DIST_RELATIVE_PATHS } from "./clean-generated-dist.mjs";
const contractBuildCommand = "pnpm --filter @trade-message-center/onetalk-contract build";
@@ -14,16 +14,16 @@ test("cleans only the explicit workspace package dist directories", () => {
const rootDir = mkdtempSync(join(tmpdir(), "tmc-dev-dist-"));
const retainedPath = join(rootDir, "retain.txt");
try {
for (const relativePath of DEV_DIST_RELATIVE_PATHS) {
for (const relativePath of GENERATED_DIST_RELATIVE_PATHS) {
const distPath = join(rootDir, relativePath);
mkdirSync(distPath, { recursive: true });
writeFileSync(join(distPath, "artifact.js"), "generated");
}
writeFileSync(retainedPath, "keep");
cleanDevDist(rootDir);
cleanGeneratedDist(rootDir);
for (const relativePath of DEV_DIST_RELATIVE_PATHS) {
for (const relativePath of GENERATED_DIST_RELATIVE_PATHS) {
assert.equal(existsSync(join(rootDir, relativePath)), false);
}
assert.equal(existsSync(retainedPath), true);
@@ -39,7 +39,7 @@ test("builds the shared contract before starting parallel development apps", asy
});
const rootDev = rootPackage.default.scripts.dev;
assert.match(rootDev, /^node scripts\/clean-dev-dist\.mjs && /u);
assert.match(rootDev, /^pnpm run clean:dist && /u);
assert.match(rootDev, /&& pnpm run version:ensure && /u);
assert.match(
rootDev,
+5 -2
View File
@@ -70,8 +70,11 @@ test("syncs version mirrors before root quality commands check them", () => {
const { scripts } = packageJson;
assert.equal(scripts["version:ensure"], "pnpm run version:sync && pnpm run version:check");
for (const scriptName of ["dev:extension", "build", "typecheck", "test", "format:check"]) {
for (const scriptName of ["dev:extension", "format:check"]) {
assert.match(scripts[scriptName], /^pnpm run version:ensure && /u);
}
assert.match(scripts.dev, /^node scripts\/clean-dev-dist\.mjs && pnpm run version:ensure && /u);
for (const scriptName of ["dev", "build", "typecheck", "test"]) {
assert.match(scripts[scriptName], /^pnpm run clean:dist && pnpm run version:ensure && /u);
}
assert.equal(scripts["clean:dist"], "node scripts/clean-generated-dist.mjs");
});