Skip to content

Commit 113ef96

Browse files
committed
chore: ssr mode support async entry
1 parent 6b9d90a commit 113ef96

File tree

4 files changed

+35
-4
lines changed

4 files changed

+35
-4
lines changed

.changeset/chilly-ducks-perform.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
'@modern-js/app-tools': patch
3+
'@modern-js/prod-server': patch
4+
---
5+
6+
chore: ssr mode support async entry

packages/server/prod-server/src/libs/render/ssr.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,8 @@ export const render = async (
7878
context.metrics = createMetrics(context, ctx.metrics);
7979

8080
runner.extendSSRContext(context);
81-
const serverRender = require(bundleJS)[SERVER_RENDER_FUNCTION_NAME];
81+
const bundleJSContent = await require(bundleJS);
82+
const serverRender = bundleJSContent[SERVER_RENDER_FUNCTION_NAME];
8283
const content = await cache(serverRender, ctx)(context);
8384

8485
const { url, status = 302 } = context.redirection;

packages/solutions/app-tools/src/analyze/generateCode.ts

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -285,9 +285,31 @@ export const generateCode = async (
285285

286286
// generate entry file.
287287
if (config.source.enableAsyncEntry) {
288+
let rawAsyncEntryCode = `import('./${ENTRY_BOOTSTRAP_FILE_NAME}');`;
289+
const ssr = getEntryOptions(
290+
entryName,
291+
config.server.ssr,
292+
config.server.ssrByEntries,
293+
packageName,
294+
);
295+
if (ssr) {
296+
rawAsyncEntryCode = `
297+
export const serverRender = async (...args) => {
298+
let exports = await ${rawAsyncEntryCode};
299+
if(exports.default instanceof Promise){
300+
exports = await exports.default;
301+
return exports.default.serverRender.apply(null, args);
302+
}
303+
return exports.serverRender.apply(null, args);
304+
};
305+
if(typeof window!=='undefined'){
306+
${rawAsyncEntryCode}
307+
}
308+
`;
309+
}
288310
const { code: asyncEntryCode } = await hookRunners.modifyAsyncEntry({
289311
entrypoint,
290-
code: `import('./${ENTRY_BOOTSTRAP_FILE_NAME}');`,
312+
code: rawAsyncEntryCode,
291313
});
292314
fs.outputFileSync(entryFile, asyncEntryCode, 'utf8');
293315

pnpm-lock.yaml

Lines changed: 4 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)