diff --git a/vike/node/plugin/plugins/importBuild/index.ts b/vike/node/plugin/plugins/importBuild/index.ts index 26f2b147040..5e9c9150fde 100644 --- a/vike/node/plugin/plugins/importBuild/index.ts +++ b/vike/node/plugin/plugins/importBuild/index.ts @@ -50,11 +50,19 @@ function getImporterCode(config: ResolvedConfig, pageFilesEntry: string) { return importerCode } function getImportPath(config: ResolvedConfig) { + // We resolve filePathAbsolute even if we don't use it: we use require.resolve() as an assertion that the relative path is correct const filePathAbsolute = toPosixPath( // [RELATIVE_PATH_FROM_DIST] Current file: node_modules/vike/dist/esm/node/plugin/plugins/importBuild/index.js require_.resolve(`../../../../../../dist/esm/node/runtime/globalContext/loadImportBuild.js`) ) - const { outDirServer } = getOutDirs(config) - const filePathRelative = path.posix.relative(outDirServer, filePathAbsolute) - return filePathRelative + if ( + // Let's implement a new config if a user needs the import to be a relative path instead of 'vike/__internal/loadImportBuild' (AFAIK a relative path is needed only if a framework has npm package 'vike' as direct dependency instead of a peer dependency and if the user of that framework uses pnpm) + true as boolean + ) { + return 'vike/__internal/loadImportBuild' + } else { + const { outDirServer } = getOutDirs(config) + const filePathRelative = path.posix.relative(outDirServer, filePathAbsolute) + return filePathRelative + } } diff --git a/vike/package.json b/vike/package.json index 7010b9f490f..3a074be93d9 100644 --- a/vike/package.json +++ b/vike/package.json @@ -105,6 +105,11 @@ "require": "./dist/cjs/node/runtime/page-files/setup.js", "node": "./dist/esm/node/runtime/page-files/setup.js", "types": "./dist/esm/node/runtime/page-files/setup.d.ts" + }, + "./__internal/loadImportBuild": { + "require": "./dist/cjs/node/runtime/globalContext/loadImportBuild.js", + "node": "./dist/esm/node/runtime/globalContext/loadImportBuild.js", + "types": "./dist/esm/node/runtime/globalContext/loadImportBuild.d.ts" } }, "peerDependencies": {