TanStack / router

πŸ€– Fully typesafe Router for React (and friends) w/ built-in caching, 1st class search-param APIs, client-side cache integration and isomorphic rendering.
https://tanstack.com/router
MIT License
7.43k stars 517 forks source link

start-basic fails to build on windows #1889

Open SeanCassiere opened 4 days ago

SeanCassiere commented 4 days ago

Describe the bug

Using the start-basic example, when you try to the build script it fails.

Your Example Website or App

Use the start-basic example

Steps to Reproduce the Bug or Issue

  1. Clone the start-basic example onto a Windows computer.
  2. Install deps.
  3. Run the build script (pnpm build).

Expected behavior

As a user, I expect the application to successfully build.

Screenshots or Videos

No response

Platform

@tanstack/start - 1.43.9 @tanstack/react-router - 1.43.6

Additional context

No response

SeanCassiere commented 4 days ago
🚨 This is the build console output on Windows.
> tanstack-router-example-react-start-basic@ build D:\code\tanstack\router\examples\react\start-basic
> vinxi build

vinxi v0.3.11

βš™  Building your app...
removing D:/code/tanstack/router/examples/react/start-basic/.vinxi/build/client

πŸ“¦ Compiling client router...
vinxi building router client in client mode

♻️  Generating routes...
βœ… Processed routes in 543ms
vite v5.3.2 building for production...
virtual:#vinxi/handler/client (1:109): "default" is not exported by "app/client.tsx", imported by "virtual:#vinxi/handler/client".
βœ“ 131 modules transformed.
.vinxi/build/client/_build/server-functions-manifest.json    0.10 kB β”‚ gzip:  0.10 kB
.vinxi/build/client/_build/.vite/manifest.json               0.38 kB β”‚ gzip:  0.20 kB
.vinxi/build/client/_build/assets/app-JDGE9Y9X.css           6.96 kB β”‚ gzip:  2.04 kB
.vinxi/build/client/_build/assets/client-JWaMu8ot.js       262.11 kB β”‚ gzip: 81.66 kB
βœ“ built in 1.51s
βœ” build done                                                                                                                                            12:20:54 pm

πŸ“¦ Compiling ssr router...
vinxi building router ssr in http mode

♻️  Regenerating routes...
βœ… Processed routes in 32ms
vite v5.3.2 building SSR bundle for production...
βœ“ 12 modules transformed.
x Build failed in 54ms

[12:20:54 pm]  ERROR  [tsr-routes-manifest] Could not load tsr:routes-manifest (imported by ../../../packages/start/dist/esm/router-manifest/index.js): Cannot read properties of undefined (reading 'map')

  at Object.load (/D:/code/tanstack/router/packages/start/dist/esm/config/index.js:284:46)
  at async PluginDriver.hookFirstAndGetPlugin (/D:/code/tanstack/router/node_modules/.pnpm/rollup@4.18.0/node_modules/rollup/dist/es/shared/node-entry.js:19674:28)   
  at async /D:/code/tanstack/router/node_modules/.pnpm/rollup@4.18.0/node_modules/rollup/dist/es/shared/node-entry.js:18845:33
  at async Queue.work (/D:/code/tanstack/router/node_modules/.pnpm/rollup@4.18.0/node_modules/rollup/dist/es/shared/node-entry.js:19884:32)

[12:20:54 pm]  ERROR  [tsr-routes-manifest] Could not load tsr:routes-manifest (imported by ../../../packages/start/dist/esm/router-manifest/index.js): Cannot read properties of undefined (reading 'map')

 ELIFECYCLE  Command failed with exit code 1.
βœ… This is the build console output on MacOS
> tanstack-router-example-react-start-basic@ build /Users/seanc/code/tanstack/router/examples/react/start-basic
> vinxi build

vinxi v0.3.11

βš™  Building your app...
removing /Users/seanc/code/tanstack/router/examples/react/start-basic/.vinxi/build/client
removing /Users/seanc/code/tanstack/router/examples/react/start-basic/.vinxi/build/ssr
removing /Users/seanc/code/tanstack/router/examples/react/start-basic/.vinxi/build/server

πŸ“¦ Compiling client router...
vinxi building router client in client mode

♻️  Generating routes...
βœ… Processed routes in 326ms
vite v5.3.2 building for production...
virtual:#vinxi/handler/client (1:119): "default" is not exported by "app/client.tsx", imported by "virtual:#vinxi/handler/client".
βœ“ 142 modules transformed.
.vinxi/build/client/_build/server-functions-manifest.json            0.11 kB β”‚ gzip:  0.11 kB
.vinxi/build/client/_build/.vite/manifest.json                       4.01 kB β”‚ gzip:  0.64 kB
.vinxi/build/client/_build/assets/app-JDGE9Y9X.css                   6.96 kB β”‚ gzip:  2.04 kB
.vinxi/build/client/_build/assets/client-DRtm2ejA.js                 0.06 kB β”‚ gzip:  0.08 kB
.vinxi/build/client/_build/assets/layout-b-BqXZPou9.js               0.13 kB β”‚ gzip:  0.13 kB
.vinxi/build/client/_build/assets/layout-a-BOzXFuCC.js               0.13 kB β”‚ gzip:  0.14 kB
.vinxi/build/client/_build/assets/posts.index-Cc3le7HX.js            0.13 kB β”‚ gzip:  0.14 kB
.vinxi/build/client/_build/assets/index-AWfY11Dp.js                  0.17 kB β”‚ gzip:  0.16 kB
.vinxi/build/client/_build/assets/_layout-DedE34UU.js                0.22 kB β”‚ gzip:  0.18 kB
.vinxi/build/client/_build/assets/_layout-2-DJ3kL6IW.js              0.43 kB β”‚ gzip:  0.24 kB
.vinxi/build/client/_build/assets/posts_._postId.deep-BaKsZ6zQ.js    0.50 kB β”‚ gzip:  0.33 kB
.vinxi/build/client/_build/assets/posts._postId-HN4Q61M6.js          0.65 kB β”‚ gzip:  0.39 kB
.vinxi/build/client/_build/assets/posts-CZdr-0gX.js                  0.67 kB β”‚ gzip:  0.42 kB
.vinxi/build/client/_build/assets/deferred-CMKlBZux.js               1.26 kB β”‚ gzip:  0.65 kB
.vinxi/build/client/_build/assets/posts-DPwlfggv.js                  2.08 kB β”‚ gzip:  0.97 kB
.vinxi/build/client/_build/assets/client-rBve8hNN.js               259.74 kB β”‚ gzip: 81.19 kB
βœ“ built in 978ms
βœ” build done                                                                                                                                          12:24:16 PM

πŸ“¦ Compiling ssr router...
vinxi building router ssr in http mode

♻️  Regenerating routes...
βœ… Processed routes in 23ms
vite v5.3.2 building SSR bundle for production...
../../../packages/react-router/dist/esm/Match.js (1:0): Module level directives cause errors when bundled, "use client" in "../../../packages/react-router/dist/esm/Match.js" was ignored.
../../../packages/react-router/dist/esm/link.js (1:0): Module level directives cause errors when bundled, "use client" in "../../../packages/react-router/dist/esm/link.js" was ignored.
βœ“ 131 modules transformed.
.vinxi/build/ssr/.vite/manifest.json                       3.74 kB
.vinxi/build/ssr/assets/app-JDGE9Y9X.css                   6.96 kB
.vinxi/build/ssr/assets/layout-a-DGkktjJC.js               0.12 kB
.vinxi/build/ssr/assets/layout-b-CK0h5wO7.js               0.12 kB
.vinxi/build/ssr/assets/posts.index-GrcD0GTd.js            0.13 kB
.vinxi/build/ssr/assets/index-B2w76Zax.js                  0.16 kB
.vinxi/build/ssr/ssr.js                                    0.22 kB
.vinxi/build/ssr/assets/_layout-DbELNLMm.js                0.37 kB
.vinxi/build/ssr/assets/_layout-2-DrawGWcq.js              0.57 kB
.vinxi/build/ssr/assets/posts_._postId.deep-DaFg3ANp.js    0.66 kB
.vinxi/build/ssr/assets/posts._postId-Byq7Gx-P.js          0.81 kB
.vinxi/build/ssr/assets/posts-B4cafvGe.js                  0.83 kB
.vinxi/build/ssr/assets/deferred-DBBiqBjV.js               1.23 kB
.vinxi/build/ssr/assets/posts-C0q103I2.js                  4.04 kB
.vinxi/build/ssr/assets/ssr-COnXDC7-.js                  123.77 kB
βœ“ built in 429ms
βœ” build done                                                                                                                                          12:24:16 PM

πŸ“¦ Compiling server router...
vinxi building router server in http mode

♻️  Regenerating routes...
βœ… Processed routes in 21ms
vite v5.3.2 building SSR bundle for production...
../../../packages/react-router/dist/esm/link.js (1:0): Module level directives cause errors when bundled, "use client" in "../../../packages/react-router/dist/esm/link.js" was ignored.
../../../packages/react-router/dist/esm/Match.js (1:0): Module level directives cause errors when bundled, "use client" in "../../../packages/react-router/dist/esm/Match.js" was ignored.
βœ“ 80 modules transformed.
.vinxi/build/server/_server/.vite/manifest.json  0.46 kB
.vinxi/build/server/_server/not-found.mjs        0.22 kB
.vinxi/build/server/_server/c_7865.mjs           0.77 kB
.vinxi/build/server/_server/entry.mjs            4.62 kB
βœ“ built in 122ms
βœ” build done                                                                                                                                          12:24:16 PM

βš™  Preparing app for vercel...
βœ” Generated public .vercel/output/static                                                                                                        vinxi 12:24:16 PM
β„Ή Building Nitro Server (preset: vercel)                                                                                                        vinxi 12:24:17 PM
βœ” Nitro Server built                                                                                                                            vinxi 12:24:18 PM
SeanCassiere commented 4 days ago

These are the client manifest outputs at start-basic/.vinxi/build/client/_build/vite/manifest.json.

🚨 Windows
{
  "D:/code/tanstack/router/examples/react/start-basic/app/styles/app.css": {
    "file": "assets/app-JDGE9Y9X.css",
    "src": "D:/code/tanstack/router/examples/react/start-basic/app/styles/app.css"
  },
  "virtual:#vinxi/handler/client": {
    "file": "assets/client-JWaMu8ot.js",
    "name": "client",
    "src": "virtual:#vinxi/handler/client",
    "isEntry": true
  }
}
βœ… MacOS
{
  "/Users/seanc/code/tanstack/router/examples/react/start-basic/app/styles/app.css": {
    "file": "assets/app-JDGE9Y9X.css",
    "src": "/Users/seanc/code/tanstack/router/examples/react/start-basic/app/styles/app.css"
  },
  "_client-rBve8hNN.js": {
    "file": "assets/client-rBve8hNN.js",
    "name": "client",
    "dynamicImports": [
      "app/routes/posts.tsx?tsr-split",
      "app/routes/posts.tsx?tsr-split",
      "app/routes/deferred.tsx?tsr-split",
      "app/routes/deferred.tsx?tsr-split",
      "app/routes/_layout.tsx?tsr-split",
      "app/routes/index.tsx?tsr-split",
      "app/routes/posts.index.tsx?tsr-split",
      "app/routes/posts.$postId.tsx?tsr-split",
      "app/routes/posts.$postId.tsx?tsr-split",
      "app/routes/_layout/_layout-2.tsx?tsr-split",
      "app/routes/posts_.$postId.deep.tsx?tsr-split",
      "app/routes/posts_.$postId.deep.tsx?tsr-split",
      "app/routes/_layout/_layout-2/layout-b.tsx?tsr-split",
      "app/routes/_layout/_layout-2/layout-a.tsx?tsr-split"
    ]
  },
  "_posts-DPwlfggv.js": {
    "file": "assets/posts-DPwlfggv.js",
    "name": "posts",
    "imports": [
      "_client-rBve8hNN.js"
    ]
  },
  "app/routes/_layout.tsx?tsr-split": {
    "file": "assets/_layout-DedE34UU.js",
    "name": "_layout",
    "src": "app/routes/_layout.tsx?tsr-split",
    "isDynamicEntry": true,
    "imports": [
      "_client-rBve8hNN.js"
    ]
  },
  "app/routes/_layout/_layout-2.tsx?tsr-split": {
    "file": "assets/_layout-2-DJ3kL6IW.js",
    "name": "_layout-2",
    "src": "app/routes/_layout/_layout-2.tsx?tsr-split",
    "isDynamicEntry": true,
    "imports": [
      "_client-rBve8hNN.js"
    ]
  },
  "app/routes/_layout/_layout-2/layout-a.tsx?tsr-split": {
    "file": "assets/layout-a-BOzXFuCC.js",
    "name": "layout-a",
    "src": "app/routes/_layout/_layout-2/layout-a.tsx?tsr-split",
    "isDynamicEntry": true,
    "imports": [
      "_client-rBve8hNN.js"
    ]
  },
  "app/routes/_layout/_layout-2/layout-b.tsx?tsr-split": {
    "file": "assets/layout-b-BqXZPou9.js",
    "name": "layout-b",
    "src": "app/routes/_layout/_layout-2/layout-b.tsx?tsr-split",
    "isDynamicEntry": true,
    "imports": [
      "_client-rBve8hNN.js"
    ]
  },
  "app/routes/deferred.tsx?tsr-split": {
    "file": "assets/deferred-CMKlBZux.js",
    "name": "deferred",
    "src": "app/routes/deferred.tsx?tsr-split",
    "isDynamicEntry": true,
    "imports": [
      "_client-rBve8hNN.js"
    ]
  },
  "app/routes/index.tsx?tsr-split": {
    "file": "assets/index-AWfY11Dp.js",
    "name": "index",
    "src": "app/routes/index.tsx?tsr-split",
    "isDynamicEntry": true,
    "imports": [
      "_client-rBve8hNN.js"
    ]
  },
  "app/routes/posts.$postId.tsx?tsr-split": {
    "file": "assets/posts._postId-HN4Q61M6.js",
    "name": "posts._postId",
    "src": "app/routes/posts.$postId.tsx?tsr-split",
    "isDynamicEntry": true,
    "imports": [
      "_client-rBve8hNN.js",
      "_posts-DPwlfggv.js"
    ]
  },
  "app/routes/posts.index.tsx?tsr-split": {
    "file": "assets/posts.index-Cc3le7HX.js",
    "name": "posts.index",
    "src": "app/routes/posts.index.tsx?tsr-split",
    "isDynamicEntry": true,
    "imports": [
      "_client-rBve8hNN.js"
    ]
  },
  "app/routes/posts.tsx?tsr-split": {
    "file": "assets/posts-CZdr-0gX.js",
    "name": "posts",
    "src": "app/routes/posts.tsx?tsr-split",
    "isDynamicEntry": true,
    "imports": [
      "_client-rBve8hNN.js",
      "_posts-DPwlfggv.js"
    ]
  },
  "app/routes/posts_.$postId.deep.tsx?tsr-split": {
    "file": "assets/posts_._postId.deep-BaKsZ6zQ.js",
    "name": "posts_._postId.deep",
    "src": "app/routes/posts_.$postId.deep.tsx?tsr-split",
    "isDynamicEntry": true,
    "imports": [
      "_client-rBve8hNN.js",
      "_posts-DPwlfggv.js"
    ]
  },
  "virtual:#vinxi/handler/client": {
    "file": "assets/client-DRtm2ejA.js",
    "name": "client",
    "src": "virtual:#vinxi/handler/client",
    "isEntry": true,
    "imports": [
      "_client-rBve8hNN.js"
    ]
  }
}

This could have a downstream effect on happens here, where it tries to match the route to the values derived from above in filesByRouteFilePath.

SeanCassiere commented 4 days ago

I'm not sure if this an issue in Start's implementation or whether it's upstream in Vinxi or Nitro.