tsyringe icon indicating copy to clipboard operation
tsyringe copied to clipboard

Fails to resolve dependencies with Vite

Open leo1553 opened this issue 1 year ago • 2 comments

Describe the bug

When trying to resolve a token with one or more dependencies, the error TypeInfo not known for "Bar" is thrown.

To Reproduce

Reproduced on StackBlitz

Sample code:

import '@abraham/reflection';

import { container, singleton } from 'tsyringe';

@singleton()
export class Foo {
  constructor() {}
}

@singleton()
export class Bar {
  constructor(public foo: Foo) {}
}

console.log(container.resolve(Foo)); // Works
console.log(container.resolve(Bar)); // Throws Uncaught Error: TypeInfo not known for "Bar"

Tested with:

{
  "scripts": {
    "start": "vite",
    "build": "tsc && vite build"
  }
}

Expected behavior

The token Bar should have been successfully resolved with its Foo dependency set.

Versions

{
  "devDependencies": {
    "typescript": "^4.9.5",
    "vite": "^5.2.9"
  },
  "dependencies": {
    "@abraham/reflection": "^0.12.0",
    "tsyringe": "^4.8.0"
  }
}

References

leo1553 avatar Apr 18 '24 15:04 leo1553

This can be fixed using @rollup/plugin-typescript:

  • Install @rollup/plugin-typescript
  • Create vite.config.mjs:
    import typescript from '@rollup/plugin-typescript';
    import { defineConfig } from 'vite';
    
    export default defineConfig({
      plugins: [typescript()]
    })
    
  • Set "module": "ESNext" in tsconfig.json

leo1553 avatar Apr 18 '24 16:04 leo1553