Skip to content

Large collections causing malformed content-modules.mjs on entry changes #12702

Description

@KianNH

Astro Info

Astro                    v5.0.4
Node                     v22.12.0
System                   macOS (arm64)
Package Manager          npm
Output                   static
Adapter                  none
Integrations             @astrojs/mdx

If this issue only occurs in one browser, which browser is a problem?

No response

Describe the Bug

In large collections (~5,000 in our live site and 25,000 in the reproduction), reloads have a chance to throw errors like The collection "..." does not exist or is empty. Ensure a collection directory with this name exists. or Failed to parse source for import analysis because the content contains invalid JS syntax. If you are using JSX, make sure to name the file with the .jsx or .tsx extension..

Error

Error: Failed to parse source for import analysis because the content contains invalid JS syntax. If you are using JSX, make sure to name the file with the .jsx or .tsx extension.
    at TransformPluginContext._formatError (file:///Users/kian/Downloads/github-b49bjx9d/node_modules/vite/dist/node/chunks/dep-yUJfKD1i.js:47158:41)
    at TransformPluginContext.error (file:///Users/kian/Downloads/github-b49bjx9d/node_modules/vite/dist/node/chunks/dep-yUJfKD1i.js:47153:16)
    at TransformPluginContext.transform (file:///Users/kian/Downloads/github-b49bjx9d/node_modules/vite/dist/node/chunks/dep-yUJfKD1i.js:45378:14)
    at async EnvironmentPluginContainer.transform (file:///Users/kian/Downloads/github-b49bjx9d/node_modules/vite/dist/node/chunks/dep-yUJfKD1i.js:47001:18)
    at async loadAndTransform (file:///Users/kian/Downloads/github-b49bjx9d/node_modules/vite/dist/node/chunks/dep-yUJfKD1i.js:40852:27)
    at async fetchModule (file:///Users/kian/Downloads/github-b49bjx9d/node_modules/vite/dist/node/chunks/dep-yUJfKD1i.js:51171:16)
    at async handleInvoke (file:///Users/kian/Downloads/github-b49bjx9d/node_modules/vite/dist/node/chunks/dep-yUJfKD1i.js:43945:22)
    at async EventEmitter.listenerForInvokeHandler (file:///Users/kian/Downloads/github-b49bjx9d/node_modules/vite/dist/node/chunks/dep-yUJfKD1i.js:44018:19) {
  plugin: 'vite:import-analysis',
  id: '/Users/kian/Downloads/github-b49bjx9d/.astro/content-modules.mjs',
  pluginCode: '\n' +
    'export default new Map([\n' +
    "['src/content/docs/foo/bar/baz-qux/123456789/000df342-c71a-4dbf-a1e6-8e93ee7c638f.mdx', () => import('astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Ffoo%2Fbar%2Fbaz-qux%2F123456789%2F000df342-c71a-4dbf-a1e6-8e93ee7c638f.mdx&astroContentModuleFlag=true')],\n" +
    "['src/content/docs/foo/bar/baz-qux/123456789/0010e138-bb89-4368-9b74-de5deaf0d99b.mdx', () => import('astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Ffoo%2Fbar%2Fbaz-qux%2F123456789%2F0010e138-bb89-4368-9b74-de5deaf0d99b.mdx&astroContentModuleFlag=true')],\n" +
    "['src/content/docs/foo/bar/baz-qux/123456789/0015a052-c4d7-4664-8bbc-2f0a573c1ab4.mdx', () => import('astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Ffoo%2Fbar%2Fbaz-qux%2F123456789%2F0015a052-c4d7-4664-8bbc-2f0a573c1ab4.mdx&astroContentModuleFlag=true')],\n" +
    "['src/content/docs/foo/bar/baz-qux/123456789/0001af01-cf78-4011-bfcb-121858d1f920.mdx', () => import('astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Ffoo%2Fbar%2Fbaz-qux%2F123456789%2F0001af01-cf78-4011-bfcb-121858d1f920.mdx&astroContentModuleFlag=true')],\n" +
    "['src/content/docs/foo/bar/baz-qux/123456789/00244fcb-33f1-44fc-8f43-009936365207.mdx', () => import('astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Ffoo%2Fbar%2Fbaz-qux%2F123456789%2F00244fcb-33f1-44fc-8f43-009936365207.mdx&astroContentModuleFlag=true')],\n" +
    "['src/content/docs/foo/bar/baz-qux/123456789/001551f7-ddc5-4fe7-ba7a-66bc0704942f.mdx', () => import('astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Ffoo%2Fbar%2Fbaz-qux%2F123456789%2F001551f7-ddc5-4fe7-ba7a-66bc0704942f.mdx&astroContentModuleFlag=true')],\n" +
    "['src/content/docs/foo/bar/baz-qux/123456789/00255513-74cb-44c4-b130-c5eecdbbd50c.mdx', () => import('astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Ffoo%2Fbar%2Fbaz-qux%2F123456789%2F00255513-74cb-44c4-b130-c5eecdbbd50c.mdx&astroContentModuleFlag=true')],\n" +
    "['src/content/docs/foo/bar/baz-qux/123456789/00230b93-2805-4db6-b239-a56271e56970.mdx', () => import('astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Ffoo%2Fbar%2Fbaz-qux%2F123456789%2F00230b93-2805-4db6-b239-a56271e56970.mdx&astroContentModuleFlag=true')],\n" +
    "['src/content/docs/foo/bar/baz-qux/123456789/0015beb3-7926-4bfa-bb30-067588753b88.mdx', () => import('astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Ffoo%2Fbar%2Fbaz-qux%2F123456789%2F0015beb3-7926-4bfa-bb30-067588753b88.mdx&astroContentModuleFlag=true')],\n" +
    "['src/content/docs/foo/bar/baz-qux/123456789/001f9a55-ae50-46c2-8b59-e7590f23c334.mdx', () => import('astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Ffoo%2Fbar%2Fbaz-qux%2F123456789%2F001f9a55-ae50-46c2-8b59-e7590f23c334.mdx&astroContentModuleFlag=true')],\n" +
    "['src/content/docs/foo/bar/baz-qux/123456789/002e1b7b-9cc8-40c4-82a8-527bbd3b0615.mdx', () => import('astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Ffoo%2Fbar%2Fbaz-qux%2F123456789%2F002e1b7b-9cc8-40c4-82a8-527bbd3b0615.mdx&astroContentModuleFlag=true')],\n" +
    "['src/content/docs/foo/bar/baz-qux/123456789/0031dbe3-fc75-49d1-8fa3-8d15c7641e06.mdx', () => import('astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Ffoo%2Fbar%2Fbaz-qux%2F123456789%2F0031dbe3-fc75-49d1-8fa3-8d15c7641e06.mdx&astroContentModuleFlag=true')],\n" +
    "['src/content/docs/foo/bar/baz-qux/123456789/002a6bce-f0be-427a-8ea2-27181e8f3762.mdx', () => import('astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Ffoo%2Fbar%2Fbaz-qux%2F123456789%2F002a6bce-f0be-427a-8ea2-27181e8f3762.mdx&astroContentModuleFlag=true')],\n" +
    "['src/content/docs/foo/bar/baz-qux/123456789/002e936d-9c3f-4b11-bd7c-a5877a018ae4.mdx', () => import('astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Ffoo%2Fbar%2Fbaz-qux%2F123456789%2F002e936d-9c3f-4b11-bd7c-a5877a018ae4.mdx&astroContentModuleFlag=true')],\n" +
    "['src/content/docs/foo/bar/baz-qux/123456789/003287d9-a51a-42e4-842c-fdd659956ab5.mdx', () => import('astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Ffoo%2Fbar%2Fbaz-qux%2F123456789%2F003287d9-a51a-42e4-842c-fdd659956ab5.mdx&astroContentModuleFlag=true')],\n" +
    "['src/content/docs/foo/bar/baz-qux/123456789/003341e4-3feb-4eef-81cb-ebe2edf012dc.mdx', () => import('astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Ffoo%2Fbar%2Fbaz-qux%2F123456789%2F003341e4-3feb-4eef-81cb-ebe2edf012dc.mdx&astroContentModuleFlag=true')],\n" +
    "['src/content/docs/foo/bar/baz-qux/123456789/00348a59-a4a1-4f08-83a7-7407b056de35.mdx', () => import('astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Ffoo%2Fbar%2Fbaz-qux%2F123456789%2F00348a59-a4a1-4f08-83a7-7407b056de35.mdx&astroContentModuleFlag=true')],\n" +
    "['src/content/docs/foo/bar/baz-qux/123456789/003b75c8-7406-4827-b7ad-adf8c09c31f5.mdx', () => import('astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Ffoo%2Fbar%2Fbaz-qux%2F123456789%2F003b75c8-7406-4827-b7ad-adf8c09c31f5.mdx&astroContentModuleFlag=true')],\n" +
    "['src/content/docs/foo/bar/baz-qux/123456789/004342c1-e51b-4bd4-9c89-23e4e23009c0.mdx', () => import('astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Ffoo%2Fbar%2Fbaz-qux%2F123456789%2F004342c1-e51b-4bd4-9c89-23e4e23009c0.mdx&astroContentModuleFlag=true')],\n" +
    "['src/content/docs/foo/bar/baz-qux/123456789/0043c7ba-8bba-4b97-baf6-688281aa8f7a.mdx', () => import('astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Ffoo%2Fbar%2Fbaz-qux%2F123456789%2F0043c7ba-8bba-4b97-baf6-688281aa8f7a.mdx&astroContentModuleFlag=true')],\n" +
    "['src/content/docs/foo/bar/baz-qux/123456789/0044a225-3bfc-412c-a815-989993ca0371.mdx', () => import('astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Ffoo%2Fbar%2Fbaz-qux%2F123456789%2F0044a225-3bfc-412c-a815-989993ca0371.mdx&astroContentModuleFlag=true')],\n" +
    "['src/content/docs/foo/bar/baz-qux/123456789/0047012f-2539-4f79-81d5-c2869daece87.mdx', () => import('astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Ffoo%2Fbar%2Fbaz-qux%2F123456789%2F0047012f-2539-4f79-81d5-c2869daece87.mdx&astroContentModuleFlag=true')],\n" +
    "['src/content/docs/foo/bar/baz-qux/123456789/004913db-12f8-4054-933b-ccd63d9e26c5.mdx', () => import('astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Ffoo%2Fbar%2Fbaz-qux%2F123456789%2F004913db-12f8-4054-933b-ccd63d9e26c5.mdx&astroContentModuleFlag=true')],\n" +
    "['src/content/docs/foo/bar/baz-qux/123456789/0045feaa-f1a1-4997-8b60-f21d362760d3.mdx', () => import('astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Ffoo%2Fbar%2Fbaz-qux%2F123456789%2F0045feaa-f1a1-4997-8b60-f21d362760d3.mdx&astroContentModuleFlag=true')],\n" +
    "['src/content/docs/foo/bar/baz-qux/123456789/0058a301-f331-481f-a5bc-33aebaa01310.mdx', () => import('astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Ffoo%2Fbar%2Fbaz-qux%2F123456789%2F0058a301-f331-481f-a5bc-33aebaa01310.mdx&astroContentModuleFlag=true')],\n" +
    "['src/content/docs/foo/bar/baz-qux/123456789/0050b159-5aec-4b1e-8cd3-5fc133ef95f5.mdx', () => import('astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Ffoo%2Fbar%2Fbaz-qux%2F123456789%2F0050b159-5aec-4b1e-8cd3-5fc133ef95f5.mdx&astroContentModuleFlag=true')],\n" +
    "['src/content/docs/foo/bar/baz-qux/123456789/0057816d-3e89-4de0-9f7e-84284eb68dc8.mdx', () => import('astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Ffoo%2Fbar%2Fbaz-qux%2F123456789%2F0057816d-3e89-4de0-9f7e-84284eb68dc8.mdx&astroContentModuleFlag=true')],\n" +
    "['src/content/docs/foo/bar/baz-qux/123456789/005a906e-6a1b-4ce2-ba62-e06543549186.mdx', () => import('astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Ffoo%2Fbar%2Fbaz-qux%2F123456789%2F005a906e-6a1b-4ce2-ba62-e06543549186.mdx&astroContentModuleFlag=true')],\n" +
    "['src/content/docs/foo/bar/baz-qux/123456789/005d471c-79e2-40ac-aa26-97687ed48da4.mdx', () => import('astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Ffoo%2Fbar%2Fbaz-qux%2F123456789%2F005d471c-79e2-40ac-aa26-97687ed48da4.mdx&astroContentModuleFlag=true')],\n" +
    "['src/content/docs/foo/bar/baz-qux/123456789/005e8d62-1d8d-46ac-9bd4-bc4202442df5.mdx', () => import('astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Ffoo%2Fbar%2Fbaz-qux%2F123456789%2F005e8d62-1d8d-46ac-9bd4-bc4202442df5.mdx&astroContentModuleFlag=true')],\n" +
    "['src/content/docs/foo/bar/baz-qux/123456789/005fb7d4-5d6c-4d21-9953-cc0cb92108c2.mdx', () => import('astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Ffoo%2Fbar%2Fbaz-qux%2F123456789%2F005fb7d4-5d6c-4d21-9953-cc0cb92108c2.mdx&astroContentModuleFlag=true')],\n" +
    "['src/content/docs/foo/bar/baz-qux/123456789/00674bb7-6f13-435e-8347-283962ef09f2.mdx', () => import('astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&f"... 1562864 more characters,
  loc: {
    file: '/Users/kian/Downloads/github-b49bjx9d/.astro/content-modules.mjs',
    line: 4980,
    column: 107
  },
  frame: "4978|  ['src/content/docs/foo/bar/baz-qux/123456789/3f3db0c6-0a64-4cbb-a9a3-2fefe898c116.mdx', () => import('astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Ffoo%2Fbar%2Fbaz-qux%2F123456789%2F3f3db0c6-0a64-4cbb-a9a3-2fefe898c116.mdx&astroContentModuleFlag=true')],\n" +
    "4979|  ['src/content/docs/foo/bar/baz-qux/123456789/3f3c35eb-9753-4df5-97ca-54e4749fda6e.mdx', () => import('astro:content-layer-deferred-module?astro%3Acontent-layer-deferred-module=&fileName=src%2Fcontent%2Fdocs%2Ffoo%2Fbar%2Fbaz-qux%2F123456789%2F3f3c35eb-9753-4df5-97ca-54e4749fda6e.mdx&astroContentModuleFlag=true')],\n" +
    "4980|  ['src/content/docs/foo/bar/baz-qux/123456789/3f40599b-8592-49ac-b684-0b364d40434d.mdx', () => import('astr\n" +
    '   |                                                                                                            ^',
  runnerError: Error: RunnerError
      at reviveInvokeError (file:///Users/kian/Downloads/github-b49bjx9d/node_modules/vite/dist/node/module-runner.js:545:18)
      at Object.invoke (file:///Users/kian/Downloads/github-b49bjx9d/node_modules/vite/dist/node/module-runner.js:628:15)
      at async SSRCompatModuleRunner.getModuleInformation (file:///Users/kian/Downloads/github-b49bjx9d/node_modules/vite/dist/node/module-runner.js:1200:73)
      at async request (file:///Users/kian/Downloads/github-b49bjx9d/node_modules/vite/dist/node/module-runner.js:1222:88)
      at async renderEntry (/Users/kian/Downloads/github-b49bjx9d/node_modules/astro/dist/content/runtime.js:352:43)
      at async eval (/Users/kian/Downloads/github-b49bjx9d/src/pages/[...entry].astro:26:23)
      at async callComponentAsTemplateResultOrResponse (file:///Users/kian/Downloads/github-b49bjx9d/node_modules/astro/dist/runtime/server/render/astro/render.js:90:25)
      at async renderToAsyncIterable (file:///Users/kian/Downloads/github-b49bjx9d/node_modules/astro/dist/runtime/server/render/astro/render.js:132:26)
      at async renderPage (file:///Users/kian/Downloads/github-b49bjx9d/node_modules/astro/dist/runtime/server/render/page.js:31:24)
      at async lastNext (file:///Users/kian/Downloads/github-b49bjx9d/node_modules/astro/dist/core/render-context.js:163:25)
}

Malformed line

"4980| ['src/content/docs/foo/bar/baz-qux/123456789/3f40599b-8592-49ac-b684-0b364d40434d.mdx', () => import('astr\n" +

Relevant code

const lines: Array<string> = [];
for (const [fileName, specifier] of this.#moduleImports) {
lines.push(`['${fileName}', () => import('${specifier}')]`);
}
const code = `
export default new Map([\n${lines.join(',\n')}]);
`;
try {
await fs.writeFile(filePath, code);

Reproduction steps

StackBlitz

Save this project locally as StackBlitz may crash due to the number of files.

  1. Run node bin/generate-entries.js.
  2. Run npx astro dev.
  3. Pick one of the generated files and load that page, i.e http://localhost:4321/00149e57-bb59-44c7-8203-61330df4796c/.
  4. Edit src/content/docs/00149e57-bb59-44c7-8203-61330df4796c.mdx repeatedly, until the error occurs.
astro-repro.mp4

What's the expected result?

No errors thrown, collections do not report as empty or missing.

Link to Minimal Reproducible Example

https://stackblitz.com/edit/github-mtk5uaws?file=src%2Fcontent.config.ts

Participation

  • I am willing to submit a pull request for this issue.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

- P2: has workaroundAn edge case that only affects very specific usage, but has a trivial workaround (priority)

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions