feat(webpack): auto fallback to commonjs via runtime detection

This commit is contained in:
Nathan Walker
2025-08-28 12:15:56 -07:00
parent efbcebbbea
commit e9d3219db2
2 changed files with 85 additions and 13 deletions

View File

@@ -1,5 +1,6 @@
import path from 'path';
import { satisfies } from 'semver';
import { getPackageJson, getProjectRootPath } from './project';
// todo: memoize
@@ -67,3 +68,41 @@ export function getDependencyVersion(dependencyName: string): string | null {
}
return null;
}
/**
* Resolve a usable version string for checks (eg. semver.satisfies).
* Strategy:
* - prefer installed package.json version (getDependencyVersion)
* - fall back to declared version in project package.json (dependencies/devDependencies)
* - if declared is a common dist-tag (alpha|beta|rc|next) return a 9.x prerelease
*/
export function getResolvedDependencyVersionForCheck(dependencyName: string, target: string): string | null {
// try installed
const installed = getDependencyVersion(dependencyName);
if (installed) {
return installed;
}
// try declared in project package.json
const pkg = getPackageJson();
const declared = (pkg.dependencies && pkg.dependencies[dependencyName]) || (pkg.devDependencies && pkg.devDependencies[dependencyName]);
if (!declared) {
return null;
}
// if declared already satisfies semver check, use it
try {
if (satisfies(declared, `>=${target}`)) {
return declared;
}
} catch (e) {
// ignore parse errors
}
// common dist-tags -> treat as prerelease of 9.x for the purpose of >=9 checks
if (/^(alpha|beta|rc|next)$/.test(String(declared))) {
return `${target}-0`;
}
return declared ?? null;
}