solidjs / solid-start

SolidStart, the Solid app framework
https://start.solidjs.com
MIT License
4.93k stars 371 forks source link

[Bug?]: Server action chunks are not generated in production build when using `experimental.islands` #1559

Open jtag05 opened 5 days ago

jtag05 commented 5 days ago

Duplicates

Latest version

Current behavior 😯

Triggering a server action from a production build when experimental.islands are enabled throws a 500 error Cannot find module for the referenced chunk.

Expected behavior πŸ€”

Server actions should behave as they do in development as well as a production build with islands disabled.

Steps to reproduce πŸ•Ή

minimum repro repository

Steps:

  1. Clone linked repo
  2. Run pnpm build
  3. Run pnpm start
  4. Open app and click Trigger Action button
  5. Observer the 500 error indicating that the server action chunk does not exist.

Context πŸ”¦

I tried debugging this locally and the issue seems related to these lines in the vinxi config. Removing the both conditionals for the islands feature re-adds the server functions, but re-adds the client side routing, obviously. Having either of the two conditionals results in the server actions chunk not being generated.

https://github.com/solidjs/solid-start/blob/main/packages/start/config/index.js#L154-L159 https://github.com/solidjs/solid-start/blob/main/packages/start/config/index.js#L192-L196

I will continue to poke around and see if I can solve this but I am not deeply familiar with vinxi or vite apart from a surface level understanding. I do find it odd that the client config is dictating if server actions are being generated though :thinking:

Your environment 🌎

System:
  OS:  Linux 6.5.0-35-generic Ubuntu 22.04.4 LTS
  CPU: i7-9750H 
Binaries:
  Node: v20.10.0
  pnpm: v9.4.0
npmPackages:
  @solidjs/router: 0.13.6
  @solidjs/start: 1.0.2
  solid-js: 1.8.17
  vinxi: 0.3.12
brenelz commented 4 days ago

I think this is kinda expected that islands doesn't work as expected anymore since its experimental

jtag05 commented 3 days ago

I understand that it is experimental and essentially in a preview mode. I was just logging the bug so it's a known issue. And if we could resolve it, all the better.

jtag05 commented 3 days ago

So the client config having an impact is a bit of a red herring. If we add start.experimental.islands ? serverComponents.server() : null to the server-fns plugins it resolves the issue without re-enabling the client side routing. I'll keep poking to make sure that all of the code in that function is required or if we could strip it down for the server functions in particular.