diff --git a/.changeset/funny-turkeys-switch.md b/.changeset/funny-turkeys-switch.md new file mode 100644 index 00000000000..3891446eb64 --- /dev/null +++ b/.changeset/funny-turkeys-switch.md @@ -0,0 +1,7 @@ +--- +'@modern-js/runtime': patch +--- + +fix(plugin-runtime): fix document CLI compatibility with ESM lib format + +fix(plugin-runtime): 修复 document CLI 在 ESM 构建格式下的兼容性问题 diff --git a/packages/runtime/plugin-runtime/src/document/cli/index.ts b/packages/runtime/plugin-runtime/src/document/cli/index.ts index 0c4cf13459d..ff4852b329b 100644 --- a/packages/runtime/plugin-runtime/src/document/cli/index.ts +++ b/packages/runtime/plugin-runtime/src/document/cli/index.ts @@ -181,7 +181,12 @@ const processCommentPlaceholders = (html: string): string => { // load CommonJS module from code string (evaluated in Node), returns exports const requireFromString = (code: string, filename: string) => { - const m = new Module.Module(filename, module.parent as Module); + const m = new Module.Module( + filename, + process.env.MODERN_LIB_FORMAT === 'esm' + ? undefined + : (module.parent as Module), + ); m.filename = filename; // set proper resolution paths for nested requires // eslint-disable-next-line @typescript-eslint/ban-ts-comment @@ -269,10 +274,14 @@ const applyExternalsPlugin = (child: Compiler, compiler: Compiler) => { }; const generateEntryCode = (docPath: string, _entryName: string): string => { - const runtimeAPI = require.resolve('../'); - const esmRuntimeAPI = runtimeAPI - .replace(`cjs`, `esm`) - .replace(/.js$/, '.mjs'); + const runtimeAPI = + process.env.MODERN_LIB_FORMAT === 'esm' + ? // @ts-ignore + import.meta.resolve('../index.mjs') + : require.resolve('../'); + const esmRuntimeAPI = runtimeAPI.endsWith('.mjs') + ? runtimeAPI + : runtimeAPI.replace(`cjs`, `esm`).replace(/\.js$/, '.mjs'); return `import React from 'react'; import ReactDomServer from 'react-dom/server';