Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

astro build fails with pnpm (but works with npm) #12669

Open
1 task
eikowagenknecht opened this issue Dec 6, 2024 · 5 comments
Open
1 task

astro build fails with pnpm (but works with npm) #12669

eikowagenknecht opened this issue Dec 6, 2024 · 5 comments
Labels
- P4: important Violate documented behavior or significantly impacts performance (priority) feat: container Related to the container API (scope)

Comments

@eikowagenknecht
Copy link

eikowagenknecht commented Dec 6, 2024

Astro Info

Astro                    v5.0.3
Node                     v20.11.1
System                   Windows (x64)
Package Manager          pnpm
Output                   static
Adapter                  none
Integrations             @astrojs/tailwind
                         @astrojs/mdx
                         @astrojs/react
                         @astrojs/sitemap

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

No response

Describe the Bug

After upgrading to Astro 5, i noticed the following:

npm run astro build works:

PS C:\***\***\***.de> npm i

> ***.de@1.0.0 postinstall
> lefthook install

sync hooks: ✔️ (commit-msg, pre-commit)

added 667 packages, and audited 668 packages in 38s

236 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities
PS C:\***\***\***.de> npm run astro build

> ***.de@1.0.0 astro
> astro build

16:12:33 [content] Syncing content
16:12:33 [content] Content config changed
16:12:33 [content] Astro version changed
16:12:33 [content] Clearing content store
[Shiki] The language "hex" doesn't exist, falling back to "plaintext".
16:12:33 [content] Synced content
16:12:33 [types] Generated 1.45s
16:12:33 [build] output: "static"
16:12:33 [build] directory: C:\***\***\***.de\dist\
16:12:33 [build] Collecting build info...
16:12:33 [build] ✓ Completed in 1.49s.
16:12:33 [build] Building static entrypoints...
16:12:36 [vite] ✓ built in 2.35s
16:12:36 [build] ✓ Completed in 2.37s.

 building client (vite) 
16:12:36 [vite] ✓ 83 modules transformed.
16:12:36 [vite] dist/_astro/client.DNpcs3m7.js            1.82 kB │ gzip:  0.91 kB
16:12:36 [vite] dist/_astro/ImageWithModal.C6dIqcxn.js   33.08 kB │ gzip: 11.58 kB
16:12:36 [vite] dist/_astro/index.EISe-aAG.js           141.72 kB │ gzip: 45.60 kB
16:12:36 [vite] ✓ built in 354ms

 generating static routes 
16:12:36 ▶ src/pages/404.astro
16:12:36   └─ /404.html (+10ms)
16:12:36 ▶ src/pages/blog.astro
16:12:36   └─ /blog/index.html (+7ms)
16:12:36 ▶ src/pages/consulting.astro
16:12:36   └─ /consulting/index.html (+2ms)
16:12:36 ▶ src/pages/datenschutz.astro
16:12:36   └─ /datenschutz/index.html (+2ms)
16:12:36 ▶ src/pages/impressum.astro
16:12:36   └─ /impressum/index.html (+2ms)
16:12:36 ▶ src/pages/posts/[...slug].astro
...
16:12:36   └─ /posts/markdown-test/index.html (+1ms)
16:12:36 ▶ src/pages/privacy-policy.astro
16:12:36   └─ /privacy-policy/index.html (+2ms)
16:12:36 ▶ src/pages/projects.astro
16:12:36   └─ /projects/index.html (+2ms)
16:12:36 λ src/pages/robots.txt.ts
16:12:36   └─ /robots.txt (+1ms)
16:12:36 λ src/pages/rss.xml.js
16:12:36   └─ /rss.xml (+9ms)
16:12:36 ▶ src/pages/simple-game-clock.astro
16:12:36   └─ /simple-game-clock/index.html (+1ms)
16:12:36 ▶ src/pages/tags/[tag].astro
16:12:36   ├─ /tags/blog/index.html (+2ms)
16:12:36   ├─ /tags/tech/index.html (+1ms)
16:12:36   ├─ /tags/home-automation/index.html (+1ms)
16:12:36   ├─ /tags/home-assistant/index.html (+1ms)
16:12:36   ├─ /tags/esp32/index.html (+1ms)
16:12:36   ├─ /tags/web-development/index.html (+1ms)
16:12:36   ├─ /tags/astro/index.html (+1ms)
16:12:36   ├─ /tags/obsidian/index.html (+1ms)
16:12:36   ├─ /tags/raspberry-pi/index.html (+1ms)
16:12:36   └─ /tags/games/index.html (+1ms)
16:12:36 ▶ src/pages/tags/index.astro
16:12:36   └─ /tags/index.html (+2ms)
16:12:36 ▶ src/pages/index.astro
16:12:36   └─ /index.html (+2ms)
16:12:36 ▶ /atom.xml
16:12:36   └─ /atom.xml/index.html (+2ms)
16:12:36 ▶ /cv
16:12:36   └─ /cv/index.html (+1ms)
16:12:36 ▶ /feed
16:12:36   └─ /feed/index.html (+1ms)
16:12:36 ✓ Completed in 324ms.

16:12:36 [@astrojs/sitemap] `sitemap-index.xml` created at `dist`
16:12:36 [build] 36 page(s) built in 4.58s
16:12:36 [build] Complete!
PS C:\***\***\***.de>

pnpm run astro build fails:

PS C:\***\***\***.de> pnpm i
Lockfile is up to date, resolution step is skipped
Packages: +642
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Progress: resolved 642, reused 642, downloaded 0, added 642, done
node_modules/.pnpm/sharp@0.33.5/node_modules/sharp: Running install script, done in 76ms
node_modules/.pnpm/lefthook@1.9.0/node_modules/lefthook: Running postinstall script, done in 271ms

dependencies:
+ @astrojs/mdx 4.0.1
+ @astrojs/react 4.0.0
+ @astrojs/rss 4.0.10
+ @astrojs/sitemap 3.2.1
+ @astrojs/tailwind 5.1.3
+ @r4ai/remark-callout 0.6.2
+ @radix-ui/react-dialog 1.1.2
+ @types/mdast 4.0.4
+ astro 5.0.3
+ clsx 2.1.1
+ hast-util-from-html-isomorphic 2.0.0
+ react 18.3.1
+ react-dom 18.3.1
+ rehype-autolink-headings 7.1.0
+ rehype-slug 6.0.0
+ remark-github-blockquote-alert 1.3.0
+ remark-toc 9.0.0
+ sanitize-html 2.13.1
+ tailwind-merge 2.5.5
+ unified 11.0.5
+ unist-util-visit 5.0.0

devDependencies:
+ @astrojs/check 0.9.4
+ @biomejs/biome 1.9.4
+ @commitlint/cli 19.6.0
+ @commitlint/config-conventional 19.6.0
+ @commitlint/types 19.5.0
+ @tailwindcss/forms 0.5.9
+ @tailwindcss/typography 0.5.15
+ @types/react 18.3.13
+ @types/react-dom 18.3.1
+ lefthook 1.9.0
+ prettier 3.4.2
+ prettier-plugin-astro 0.14.1
+ prettier-plugin-tailwindcss 0.6.9
+ tailwindcss 3.4.16
+ typescript 5.7.2

> ***.de@1.0.0 postinstall C:\***\***\***.de
> lefthook install

sync hooks: ✔️ (pre-commit, commit-msg)

Done in 4.9s
PS C:\***\***\***.de> pnpm run astro build

> ***.de@1.0.0 astro C:\***\***\***.de
> astro "build"

16:13:23 [content] Syncing content
16:13:23 [content] Content config changed
16:13:23 [content] Astro version changed
16:13:23 [content] Clearing content store
[Shiki] The language "hex" doesn't exist, falling back to "plaintext".
16:13:24 [content] Synced content
16:13:24 [types] Generated 1.13s
16:13:24 [build] output: "static"
16:13:24 [build] directory: C:\***\***\***.de\dist\
16:13:24 [build] Collecting build info...
16:13:24 [build] ✓ Completed in 1.18s.
16:13:24 [build] Building static entrypoints...
16:13:29 [ERROR] [vite] x Build failed in 4.50s
[vite]: Rollup failed to resolve import "fsevents" from "C:/***/***/***.de/node_modules/.pnpm/rollup@4.28.0/node_modules/rollup/dist/es/shared/node-entry.js".
This is most likely unintended because it can break your application at runtime.
If you do want to externalize this module explicitly add it to
`build.rollupOptions.external`
  Stack trace:
    at viteWarn (file:///C:/***/***/***.de/node_modules/.pnpm/vite@6.0.3_@types+node@22.10.1_jiti@1.21.6_yaml@2.6.1/node_modules/vite/dist/node/chunks/dep-yUJfKD1i.js:50728:17)
    at onRollupWarning (file:///C:/***/***/***.de/node_modules/.pnpm/vite@6.0.3_@types+node@22.10.1_jiti@1.21.6_yaml@2.6.1/node_modules/vite/dist/node/chunks/dep-yUJfKD1i.js:50758:5)
    at file:///C:/***/***/***.de/node_modules/.pnpm/rollup@4.28.0/node_modules/rollup/dist/es/shared/node-entry.js:19475:13
    at ModuleLoader.handleInvalidResolvedId (file:///C:/***/***/***.de/node_modules/.pnpm/rollup@4.28.0/node_modules/rollup/dist/es/shared/node-entry.js:20090:26)  
    at async file:///C:/***/***/***.de/node_modules/.pnpm/rollup@4.28.0/node_modules/rollup/dist/es/shared/node-entry.js:20036:32
 ELIFECYCLE  Command failed with exit code 1.
PS C:\***\***\***.de> 

The culprit seems to be the rss config. As soon as I remove the file, it works with pnpm as well:

import { getCollection } from "astro:content";
import { SITE } from "@/config";
import mdxRenderer from "@astrojs/mdx/server.js";
import reactRenderer from "@astrojs/react/server.js";
import rss from "@astrojs/rss";
import { experimental_AstroContainer as AstroContainer } from "astro/container";
import sanitizeHtml from "sanitize-html";

export async function GET(context) {
  const container = await AstroContainer.create();
  container.addServerRenderer({ renderer: mdxRenderer });
  container.addServerRenderer({ renderer: reactRenderer });
  const publishedBlogEntries = await getCollection("posts", ({ data }) => {
    return Boolean(data.published);
  });

  const sortedPosts = Object.values(publishedBlogEntries).sort((a, b) => {
    if (!a.data.published || !b.data.published) {
      return -1;
    }
    return (
      new Date(b.data.published).valueOf() -
      new Date(a.data.published).valueOf()
    );
  });

  return rss({
    title: SITE.title,
    description: SITE.description,
    site: context.site,
    items: await Promise.all(
      sortedPosts.map(async (post) => {
        const rssEntry = {
          title: post.data.title,
          description: post.data.description,
          pubDate: post.data.published,
          link: `/posts/${post.slug}/`,
        };

        // For now, only add the content when it can be rendered.
        // Should be fixed soon, see https://github.com/withastro/astro/issues/11407
        try {
          const { Content } = await post.render();
          const postHtml = await container.renderToString(Content);
          const sanitizedHtml = sanitizeHtml(postHtml, {
            allowedTags: sanitizeHtml.defaults.allowedTags.concat(["img"]),
          });

          rssEntry.content = sanitizedHtml;
        } catch (error) {
          console.log(`Can't render feed content for ${post.slug}, skipping.`);
        }

        return rssEntry;
      }),
    ),
    customData: "<language>en-us</language>",
    stylesheet: "/assets/styles/rss.xsl",
  });
}

Removing the import { experimental_AstroContainer as AstroContainer } from "astro/container"; fixes the hangup.

Reminds me of #11128, but since that one has been fixed apparently, it might be something else as well.

What's the expected result?

Compilation working with pnpm as well.

Link to Minimal Reproducible Example

No link because Stackblitz doesn't allow using pnpm as far as I can tell.

Participation

  • I am willing to submit a pull request for this issue.
@github-actions github-actions bot added the needs triage Issue needs to be triaged label Dec 6, 2024
@ArmandPhilippot
Copy link
Contributor

ArmandPhilippot commented Dec 6, 2024

I'm also encountering this issue since Astro 5 with the same use. In dev I have no errors, that's why I didn't noticed yet. I tried to build after seeing this issue and I get the same error.

I tried to make a reproduction as minimal as possible: https://github.com/ArmandPhilippot/astro5-container-pnpm-build-error

  • I defined a posts collection with a Markdown post
  • I added the site property in astro.config.mjs
  • I created src/pages/feed.xml.ts to create a RSS feed using astro/container

When you use pnpm build you should see the same error.

If I add rollupOptions in astro.config.mjs like this:

vite: {
    build: {
      rollupOptions: {
        external: "fsevents",
      },
    },
},

I get the following error:

__dirname is not defined in ES module scope
  Location:
    /home/armand/Dev/tmp/astro-build-pnpm-error/node_modules/.pnpm/astro@5.0.3_rollup@4.28.1_typescript@5.7.2/node_modules/astro/dist/core/build/pipeline.js:221:15
  Stack trace:
    at requireNative (file:///home/armand/Dev/tmp/astro-build-pnpm-error/dist/chunks/feed_sEdlxitk.mjs:23031:24)
    at ModuleJob.run (node:internal/modules/esm/module_job:234:25)
    at async BuildPipeline.retrieveSsrEntry (file:///home/armand/Dev/tmp/astro-build-pnpm-error/node_modules/.pnpm/astro@5.0.3_rollup@4.28.1_typescript@5.7.2/node_modules/astro/dist/core/build/pipeline.js:221:15)
    at async staticBuild (file:///home/armand/Dev/tmp/astro-build-pnpm-error/node_modules/.pnpm/astro@5.0.3_rollup@4.28.1_typescript@5.7.2/node_modules/astro/dist/core/build/static-build.js:89:5)
    at async AstroBuilder.run (file:///home/armand/Dev/tmp/astro-build-pnpm-error/node_modules/.pnpm/astro@5.0.3_rollup@4.28.1_typescript@5.7.2/node_modules/astro/dist/core/build/index.js:183:7)

So I guess it's more complicated to find a workaround on the user side.

I know it's not the primary use for astro/container so maybe it's not really a "bug". However, it was working with v4 so if Astro wants to support this usage I hope the reproduction can help to debug...

Oh and I'm not on Windows so:

Astro                    v5.0.3
Node                     v20.17.0
System                   Linux (x64)
Package Manager          pnpm
Output                   static
Adapter                  none
Integrations             none

@AceCodePt
Copy link

AceCodePt commented Dec 9, 2024

I've found a workaround...
I had to install fsevents menually.

Never mind... It failed on runtime
Though it happened for me as well...

Astro                    v5.0.3
Node                     v22.12.0
System                   Linux (x64)
Package Manager          pnpm
Output                   server
Adapter                  node
Integrations             none

@coderfe

This comment has been minimized.

coderfe added a commit to coderfe/www that referenced this issue Dec 12, 2024
暂时移除 rss 全文输出
withastro/astro#12669
@ematipico ematipico added - P4: important Violate documented behavior or significantly impacts performance (priority) feat: container Related to the container API (scope) and removed needs triage Issue needs to be triaged labels Dec 12, 2024
@Hentioe
Copy link

Hentioe commented Dec 20, 2024

I am experiencing exactly the same issue as @ArmandPhilippot. Are there any leads on this problem? Is there a fix planned?

Additional note: If I remove the import of astro/container, the issue disappears.

@SapphicMoe
Copy link
Contributor

Until this issue is fixed, you can use pnpm install --shamefully-hoist to install dependencies. I've had the same error on pnpm (but not bun), and running this command fixed my fsevents build errors.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
- P4: important Violate documented behavior or significantly impacts performance (priority) feat: container Related to the container API (scope)
Projects
None yet
Development

No branches or pull requests

7 participants