mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-11-05 13:26:48 +08:00
feat(webpack): auto fallback to commonjs via runtime detection
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user