Type-safe dependency injection for Vue, simplified into a single composable.
npm install @muxiu1997/vue-easy-diimport defineUseDependencyInjection from '@muxiu1997/vue-easy-di'
// Define a DI composable
const useFoo = defineUseDependencyInjection<Foo>()
// Provide in parent component
useFoo('provide', () => new Foo())
// Inject in child component
const foo = useFoo() // foo: Foo | undefined
const foo = useFoo('inject') // equivalent// The initializer is called automatically in provide mode
const useFoo = defineUseDependencyInjection(() => new Foo())
useFoo('provide') // uses default initializer
useFoo('provide', () => new Bar()) // overrides initializer
const foo = useFoo() // foo: Foo | undefined// Fallback value when no provider is found
const useFoo = defineUseDependencyInjection<Foo>({
injectDefault: () => Foo.empty(),
})
const foo = useFoo() // foo: Foo (never undefined)// Throws when no provider is found
const useFoo = defineUseDependencyInjection<Foo>({
throwOnNoProvider: () => new Error('Foo provider is required'),
})
const foo = useFoo() // foo: Foo (throws if no provider)const useFoo = defineUseDependencyInjection<Foo>()
// Override injectDefault
const foo = useFoo('inject', { injectDefault: () => Foo.empty() })
// Override throwOnNoProvider
const foo = useFoo('inject', { throwOnNoProvider: () => new Error('missing') })git clone https://github.com/MuXiu1997/vue-easy-di.git
cd vue-easy-di
pnpm installpnpm run lint— Lint and auto-fix.pnpm run test— Run tests with type checking.pnpm run coverage— Run tests with coverage report.pnpm run build— Build the library.
This project is licensed under the MIT License.