Skip to content

Commit 6a0d5c6

Browse files
committed
fix errors when running the preview server on the demo
This was mostly caused because `pnpm` doesn't allow for resolving `@react-email/render` when only `@react-email/components` is installed like npm or other package managers do. The solution for this was overriding the resolution of the module to get `renderAsync` from, and then trying both `@react-email/render` and `@react-email/components` until it actually errors.
1 parent 28b565e commit 6a0d5c6

File tree

1 file changed

+31
-2
lines changed

1 file changed

+31
-2
lines changed

packages/react-email/src/utils/get-email-component.ts

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,16 +40,45 @@ export const getEmailComponent = async (
4040
{ filter: new RegExp(path.basename(emailPath)) },
4141
async () => ({
4242
contents: `${await fs.readFile(emailPath, 'utf8')};
43-
44-
export { renderAsync } from '@react-email/render'`,
43+
export { renderAsync } from 'react-email-module-that-will-export-render'
44+
`,
4545
loader: path.extname(emailPath).slice(1) as Loader,
4646
}),
4747
);
48+
49+
b.onResolve(
50+
{ filter: /^react-email-module-that-will-export-render$/ },
51+
async (args) => {
52+
let result = await b.resolve('@react-email/render', {
53+
kind: 'import-statement',
54+
importer: args.importer,
55+
resolveDir: args.resolveDir,
56+
namespace: args.namespace,
57+
});
58+
if (result.errors.length === 0) {
59+
return result;
60+
}
61+
62+
// If @react-email/render does not exist, resolve to @react-email/components
63+
result = await b.resolve('@react-email/components', {
64+
kind: 'import-statement',
65+
importer: args.importer,
66+
resolveDir: args.resolveDir,
67+
namespace: args.namespace,
68+
});
69+
if (result.errors.length > 0) {
70+
result.errors[0]!.text =
71+
"Trying to resolve `renderAsync` from both `@react-email/render` and `@react-email/components` to be able to render your email template. Maybe you don't have the required dependencies installed?";
72+
}
73+
return result;
74+
},
75+
);
4876
},
4977
},
5078
],
5179
platform: 'node',
5280
write: false,
81+
5382
format: 'cjs',
5483
jsx: 'automatic',
5584
logLevel: 'silent',

0 commit comments

Comments
 (0)