Skip to content

Commit 0efaef0

Browse files
rsbhclaude
andcommitted
fix: use relative ../../.content/ path for MDX imports
Remove @content alias, resolveId plugin, and preserveSymlinks. Use relative path from source file to .content/ symlink instead. Vite statically analyzes the ../../.content/ prefix to glob and bundle all MDX files at build time. Works in both dev and production. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 49fe67c commit 0efaef0

4 files changed

Lines changed: 11 additions & 18 deletions

File tree

packages/chronicle/src/lib/page-context.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,10 @@ interface PageProviderProps {
4848
}
4949

5050
async function loadMdxComponent(relativePath: string): Promise<ReactNode> {
51-
const mod = await import(/* @vite-ignore */ `/.content/${relativePath}`);
51+
const withoutExt = relativePath.replace(/\.(mdx|md)$/, '');
52+
const mod = relativePath.endsWith('.md')
53+
? await import(`../../.content/${withoutExt}.md`)
54+
: await import(`../../.content/${withoutExt}.mdx`);
5255
return mod.default
5356
? React.createElement(mod.default, { components: mdxComponents })
5457
: null;

packages/chronicle/src/lib/source.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,8 +126,8 @@ export async function loadPageComponent(
126126
const relativePath = path.relative(contentDir, page.filePath);
127127
const withoutExt = relativePath.replace(/\.(mdx|md)$/, '');
128128
const mod = relativePath.endsWith('.md')
129-
? await import(`@content/${withoutExt}.md`)
130-
: await import(`@content/${withoutExt}.mdx`);
129+
? await import(`../../.content/${withoutExt}.md`)
130+
: await import(`../../.content/${withoutExt}.mdx`);
131131
return mod.default;
132132
}
133133

packages/chronicle/src/server/entry-client.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,10 @@ async function hydrate() {
6060
async function loadPage(
6161
embedded: EmbeddedData
6262
): Promise<{ slug: string[]; frontmatter: Frontmatter; content: ReactNode }> {
63-
const mod = await import(/* @vite-ignore */ `/.content/${embedded.relativePath}`);
63+
const withoutExt = embedded.relativePath.replace(/\.(mdx|md)$/, '');
64+
const mod = embedded.relativePath.endsWith('.md')
65+
? await import(`../../.content/${withoutExt}.md`)
66+
: await import(`../../.content/${withoutExt}.mdx`);
6467
const content = mod.default
6568
? React.createElement(mod.default, { components: mdxComponents })
6669
: null;

packages/chronicle/src/server/vite-config.ts

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -23,28 +23,15 @@ export async function createViteConfig(
2323
nitro({
2424
serverDir: path.resolve(packageRoot, 'src/server'),
2525
...(preset && { preset }),
26-
alias: {
27-
'@content': path.resolve(packageRoot, '.content'),
28-
},
2926
}),
3027
mdx({}, { index: false }),
31-
react(),
32-
{
33-
name: 'chronicle:content-alias',
34-
resolveId(id) {
35-
if (id.startsWith('@content/')) {
36-
return path.resolve(packageRoot, '.content', id.slice('@content/'.length));
37-
}
38-
},
39-
}
28+
react()
4029
],
4130
resolve: {
4231
alias: {
4332
'@': path.resolve(packageRoot, 'src'),
44-
'@content': path.resolve(packageRoot, '.content'),
4533
},
4634
conditions: ['module-sync', 'import', 'node'],
47-
preserveSymlinks: true,
4835
dedupe: [
4936
'react',
5037
'react-dom',

0 commit comments

Comments
 (0)