Vue 3, Uncaught TypeError: Vue.use is not a function

Stefan Bogdanescu

Founder & Senior Architect · 2026-06-29

Laravel Company
# Vue 3, Uncaught TypeError: Vue.use is not a function: Navigating the Migration Pitfalls Migrating an existing frontend application from Vue 2 to Vue 3 is an exciting step forward, bringing performance improvements and access to the powerful Composition API. However, as many developers discover during this transition, moving between major versions often reveals subtle, yet critical, breaking changes in the underlying API. One of the most common stumbling blocks encountered during this process is exactly what you’ve described: `Uncaught TypeError: Vue.use is not a function`. As a senior developer, I can tell you that this error isn't about your application logic itself; it's a symptom of an API incompatibility between how Vue 2 and Vue 3 handle module registration and plugin usage. Let’s dive deep into why this happens and how to fix it during your Laravel-based migration project. ## Understanding the Root Cause: Vue API Changes The error `Vue.use is not a function` occurs because the way plugins and modules were registered in Vue 2 (using the global `Vue.use()` method) has been fundamentally altered or removed in Vue 3. The Vue 3 architecture strongly favors explicit imports and the Composition API structure, which deprecates many of the older module registration patterns. In Vue 2, developers often relied on methods like `Vue.use(SomePlugin)` to inject functionality globally. In contrast, Vue 3 encourages a more modular approach where dependencies are explicitly imported at the top level of a file or registered via specific entry points provided by the build tool (like Vite). When you attempt to call an obsolete function like `Vue.use()` in a Vue 3 environment, the runtime throws this error because that method no longer exists on the global `Vue` object. This issue often surfaces when migrating older projects, especially those built using older versions of tooling or specific third-party libraries that haven't been fully updated for Vue 3 compatibility. ## Practical Solutions for Migration To resolve this error during your Laravel/Vue migration, you need to shift from the older registration style to the modern Vue 3 approach. Here are the most common scenarios and their fixes: ### 1. Replacing Plugin Registration with Direct Imports If you were using `Vue.use()` to bring in a library or plugin, the Vue 3 solution is typically to import the necessary components or modules directly into your component files or use the setup context. **The Old (Vue 2 style):** ```javascript // In Vue 2 setup import Vue from 'vue'; import MyPlugin from 'my-plugin'; Vue.use(MyPlugin); // <-- Causes the error in Vue 3! ``` **The New (Vue 3 Composition API/Setup Style):** Instead of global registration, you import what you need directly where it is required. For many modern setups, especially those integrated with tools like Vite (which Laravel projects increasingly use), this direct import pattern is mandatory. ```javascript // In Vue 3 setup (using