diff --git a/src/rollup/plugins/externals.ts b/src/rollup/plugins/externals.ts index 79b8269e27..9e42c35e71 100644 --- a/src/rollup/plugins/externals.ts +++ b/src/rollup/plugins/externals.ts @@ -4,7 +4,8 @@ import type { PackageJson } from "pkg-types"; import { nodeFileTrace, NodeFileTraceOptions } from "@vercel/nft"; import type { Plugin } from "rollup"; import { resolvePath, isValidNodeImport, normalizeid } from "mlly"; -import { isDirectory, retry } from "../../utils"; +// import semver from "semver"; +import { isDirectory } from "../../utils"; export interface NodeExternalsOptions { inline?: string[]; @@ -358,7 +359,9 @@ export function externals(opts: NodeExternalsOptions): Plugin { // Write traced packages await Promise.all( Object.values(tracedPackages).map(async (tracedPackage) => { - const versions = Object.keys(tracedPackage.versions); // TODO: sort by semver + // TODO: Sort versions + // const versions = sortVersions(Object.keys(tracedPackage.versions)); + const versions = Object.keys(tracedPackage.versions); if (versions.length === 1) { // Write the only version into node_modules/{name} await writePackage(tracedPackage.name, versions[0]); @@ -373,16 +376,21 @@ export function externals(opts: NodeExternalsOptions): Plugin { await writePackage( tracedPackage.name, version, - `${tracedPackage.name}@${version}` + `.nitro/${tracedPackage.name}@${version}` + ); + // Link one version to the top level (for indirect bundle deps) + await linkPackage( + `.nitro/${tracedPackage.name}@${version}`, + `${tracedPackage.name}` ); // For each parent, link into node_modules/{parent}/node_modules/{name} for (const parentPath of parentPkgs) { await linkPackage( - `${tracedPackage.name}@${version}`, - `${parentPath}/node_modules/${tracedPackage.name}` + `.nitro/${tracedPackage.name}@${version}`, + `.nitro/${parentPath}/node_modules/${tracedPackage.name}` ); await linkPackage( - `${tracedPackage.name}@${version}`, + `.nitro/${tracedPackage.name}@${version}`, `${parentPath.split("@")[0]}/node_modules/${ tracedPackage.name }` @@ -419,6 +427,16 @@ export function externals(opts: NodeExternalsOptions): Plugin { }; } +// function sortVersions(versions: string[]) { +// return versions.sort((v1 = "0.0.0", v2 = "0.0.0") => { +// try { +// return semver.lt(v1, v2, { loose: true }) ? 1 : -1; +// } catch { +// return v1.localeCompare(v2); +// } +// }); +// } + function parseNodeModulePath(path: string) { if (!path) { return {}; diff --git a/test/fixture/_/node_modules/nitro-lib/package.json b/test/fixture/_/node_modules/nitro-lib/package.json index 3709569af3..ac01a7ab9d 100644 --- a/test/fixture/_/node_modules/nitro-lib/package.json +++ b/test/fixture/_/node_modules/nitro-lib/package.json @@ -4,5 +4,8 @@ "exports": { ".": "./index.mjs", "./subpath": "./subpath.mjs" + }, + "dependencies": { + "nested-dep": "2.0.0" } }