Skip to content

Built app crashes on startup: "tsyringe requires a reflect polyfill" #21

@wpabaln

Description

@wpabaln

Host: MacBook Pro 16" nov 2024, 48GB, Tahoe 26.4.1
pnpm: 10.33.0
Node: 25.8.1
Bun: 1.3.10
Nx workspace, pnpm monorepo

output:

build % ./app 
120208 |   init_lazy_helpers();
120209 |   init_dependency_container();
120210 |   init_decorators2();
120211 |   init_factories();
120212 |   init_providers();
120213 |     throw new Error(`tsyringe requires a reflect polyfill. Please add 'import "reflect-metadata"' to the top of your entry point.`);
                   ^
error: tsyringe requires a reflect polyfill. Please add 'import "reflect-metadata"' to the top of your entry point.
      at <anonymous> (/$bunfs/root/app:120213:11)
      at <anonymous> (/$bunfs/root/app:46:50)
      at <anonymous> (/$bunfs/root/app:121660:13)
      at <anonymous> (/$bunfs/root/app:46:50)
      at <anonymous> (/$bunfs/root/app:123752:15)
      at <anonymous> (/$bunfs/root/app:46:50)
      at <anonymous> (/$bunfs/root/app:124460:21)
      at <anonymous> (/$bunfs/root/app:46:50)
      at <anonymous> (/$bunfs/root/app:124516:15)
      at <anonymous> (/$bunfs/root/app:46:50)

Bun v1.3.10 (macOS arm64)

package.json of the app:

{
// ...
  "type": "module",
  "scripts": {
    "build": "vite build",
// ...
  },
  "devDependencies": {
    "@better-auth/cli": "~1.4.21",
    "@eslint/compat": "^2.0.3",
    "@eslint/js": "^10.0.1",
    "@inlang/paraglide-js": "^2.10.0",
    "@module-federation/vite": "^1.13.6",
    "@playwright/test": "^1.58.2",
    "@sveltejs/adapter-auto": "^7.0.0",
    "@sveltejs/kit": "2.57.1",
    "@sveltejs/vite-plugin-svelte": "^6.2.4",
    "@tailwindcss/forms": "^0.5.11",
    "@tailwindcss/typography": "^0.5.19",
    "@tailwindcss/vite": "^4.1.18",
    "@types/jsonwebtoken": "^9.0.10",
    "@types/lodash": "^4.17.24",
    "@types/luxon": "^3.7.1",
    "@types/node": "^24",
    "@vitest/browser-playwright": "^4.1.0",
    "eslint": "^10.0.3",
    "eslint-plugin-svelte": "^3.15.2",
    "globals": "^17.4.0",
    "license-report": "^6.8.2",
    "mdsvex": "^0.12.6",
    "playwright": "^1.58.2",
    "prettier": "^3.8.1",
    "prettier-plugin-svelte": "^3.4.1",
    "prettier-plugin-tailwindcss": "^0.7.2",
    "svelte": "^5.54.0",
    "svelte-check": "^4.4.2",
    "tailwindcss": "^4.1.18",
    "typescript": "^5.9.3",
    "typescript-eslint": "^8.57.0",
    "vite": "7.3.2",
    "vite-plugin-devtools-json": "^1.0.0",
    "vitest": "^4.1.0",
    "vitest-browser-svelte": "^2.0.2"
  },
  "dependencies": {
    "@auth/sveltekit": "^1.11.1",
    "@better-auth/api-key": "^1.5.6",
    "@better-auth/passkey": "^1.5.6",
    "@cartamd/plugin-emoji": "^4.3.0",
    "@fontsource-variable/inter": "^5.2.8",
    "@jesterkit/exe-sveltekit": "^0.1.7",
    "@lucide/svelte": "^1.7.0",
    "@module-federation/enhanced": "^2.3.0",
    "@sanity/comlink": "^4.0.1",
    "@sentry/sveltekit": "^10.46.0",
    "@svelte-put/clickoutside": "^4.0.0",
    "@sveltejs/adapter-node": "^5.5.4",
    "@tabler/icons-svelte": "^3.41.1",
    "@tanstack/svelte-query": "^6.1.10",
    "accept-language": "^3.0.20",
    "axios": "1.15.0",
    "bcp-47-match": "^2.0.3",
    "bcp-47-normalize": "^2.3.0",
    "better-auth": "^1.5.4",
    "better-auth-localization": "^3.0.0",
    "bits-ui": "^2.16.5",
    "browser-fs-access": "^0.38.0",
    "bson": "^7.2.0",
    "carta-md": "^4.11.1",
    "carta-plugin-imsize": "^2.1.0",
    "carta-plugin-video": "^2.1.0",
    "clsx": "^2.1.1",
    "cookie": "^1.1.1",
    "fuse.js": "^7.1.0",
    "isomorphic-dompurify": "^3.7.1",
    "jsonwebtoken": "^9.0.3",
    "lodash": "^4.17.23",
    "luxon": "^3.7.2",
    "mini-signals": "^3.0.0",
    "mode-watcher": "^1.1.0",
    "print-js": "^1.6.0",
    "runed": "^0.37.1",
    "surreal-better-auth": "2.0.0-beta.8",
    "surrealdb": "^2.0.3",
    "svelte-keyboard-shortcuts": "^0.0.2",
    "svelte-sonner": "^1.1.0",
    "sveltekit-flash-message": "^2.4.6",
    "sveltekit-superforms": "^2.30.1",
    "tailwind-merge": "^3.5.0",
    "tailwind-variants": "^3.2.2",
    "tw-animate-css": "^1.4.0",
    "ulid": "^3.0.2",
    "unescape": "^1.0.1",
    "zod": "^4.3.6"
  },
  "nx": {
    "targets": {
      "build": {
        "cache": true
      }
    }
  }
}

svelte.config.ts:

import {mdsvex} from 'mdsvex';
import adapter from "@jesterkit/exe-sveltekit";
import {relative, sep} from 'node:path';

/** @type {import('@sveltejs/kit').Config} */
const config = {
  compilerOptions: {
    // defaults to rune mode for the project, execept for `node_modules`. Can be removed in svelte 6.
    runes: ({filename}) => {
      const relativePath = relative(import.meta.dirname, filename);
      const pathSegments = relativePath.toLowerCase().split(sep);
      const isExternalLibrary = pathSegments.includes('node_modules');

      return isExternalLibrary ? undefined : true;
    },
  },
  kit: {
    // adapter-auto only supports some environments, see https://svelte.dev/docs/kit/adapter-auto for a list.
    // If your environment is not supported, or you settled on a specific environment, switch out the adapter.
    // See https://svelte.dev/docs/kit/adapters for more information about adapters.
    adapter: adapter({
      embedStatic: true,
      binaryName: 'app',
      out: 'build'
    }),
    experimental: {
      instrumentation: {
        server: true
      }
    },
  },
  preprocess: [mdsvex({extensions: ['.svx', '.md']})],
  extensions: ['.svelte', '.svx', '.md'],
};

export default config;

vite.config.ts:

import {paraglideVitePlugin} from '@inlang/paraglide-js';
import devtoolsJson from 'vite-plugin-devtools-json';
import tailwindcss from '@tailwindcss/vite';
import {defineConfig} from 'vitest/config';
import {playwright} from '@vitest/browser-playwright';
import {sveltekit} from '@sveltejs/kit/vite';
import {federation} from '@module-federation/vite';
import {readFileSync} from 'fs';
import {fileURLToPath} from 'url';
import {exec} from 'node:child_process';
import {sentrySvelteKit} from '@sentry/sveltekit';

export default defineConfig({
  server: {
    port: 3001,
    cors: true,
  },
  define: {
    'process.env.NODE_ENV': '"production"',
    PKG: JSON.parse(readFileSync(fileURLToPath(new URL('package.json', import.meta.url)), 'utf8'))
  },
  plugins: [
    sentrySvelteKit({
      adapter: 'node'
    }),
    tailwindcss(),
    sveltekit(),
    devtoolsJson(),
    paraglideVitePlugin({project: '../../project.inlang', outdir: './src/lib/paraglide'}),
  ],
  test: {
// ...
  },
});

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions