49 lines
2.0 KiB
JavaScript
49 lines
2.0 KiB
JavaScript
|
|
/**
|
|||
|
|
* 扫描根 package.json + 所有 workspace 子包的 dependencies/optionalDependencies,
|
|||
|
|
* 找出 workspace 子包引用但根 package.json 没声明的运行时依赖(hoist 到根 node_modules 了)。
|
|||
|
|
*
|
|||
|
|
* 这些包 electron-builder 收集器看不到(它只读根 package.json),
|
|||
|
|
* 会导致打包后 MODULE_NOT_FOUND。需要加到根 package.json 里。
|
|||
|
|
*/
|
|||
|
|
const fs = require("node:fs");
|
|||
|
|
const path = require("node:path");
|
|||
|
|
|
|||
|
|
const rootDir = path.resolve(__dirname, "..");
|
|||
|
|
const rootPkg = JSON.parse(fs.readFileSync(path.join(rootDir, "package.json"), "utf-8"));
|
|||
|
|
|
|||
|
|
// workspace 配置
|
|||
|
|
let globs = rootPkg.workspace || rootPkg.pnpm?.packages || ["packages/*"];
|
|||
|
|
if (!Array.isArray(globs)) globs = ["packages/*"];
|
|||
|
|
|
|||
|
|
const rootRuntime = { ...rootPkg.dependencies, ...rootPkg.optionalDependencies };
|
|||
|
|
|
|||
|
|
const subRuntime = {}; // 子包独有的运行时依赖 → 版本
|
|||
|
|
|
|||
|
|
for (const g of globs) {
|
|||
|
|
const dir = path.join(rootDir, g.replace("/*", ""));
|
|||
|
|
if (!fs.existsSync(dir)) continue;
|
|||
|
|
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|||
|
|
for (const e of entries) {
|
|||
|
|
if (!e.isDirectory()) continue;
|
|||
|
|
const pkgPath = path.join(dir, e.name, "package.json");
|
|||
|
|
if (!fs.existsSync(pkgPath)) continue;
|
|||
|
|
const pkgJson = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
|
|||
|
|
const deps = { ...pkgJson.dependencies, ...pkgJson.optionalDependencies };
|
|||
|
|
for (const [name, version] of Object.entries(deps)) {
|
|||
|
|
if (!rootRuntime[name] && !subRuntime[name]) {
|
|||
|
|
subRuntime[name] = version;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
const missingRootDeps = Object.keys(subRuntime);
|
|||
|
|
console.log("子包独有的运行时依赖(根 package.json 没声明):");
|
|||
|
|
console.log(" 数量:", missingRootDeps.length);
|
|||
|
|
console.log(" 列表:", missingRootDeps.join(", "));
|
|||
|
|
console.log("");
|
|||
|
|
console.log("根 package.json 已有运行时依赖:", Object.keys(rootRuntime).length);
|
|||
|
|
console.log("");
|
|||
|
|
console.log("建议加到根 package.json.dependencies 的条目:");
|
|||
|
|
console.log(JSON.stringify(subRuntime, null, 2));
|