babel-plugin-vue-jsx-hmr

babel plugin for vue3 jsx HMR
267,483 5
Install
npm install babel-plugin-vue-jsx-hmr
Latest Version:1.0.2
License:MIT
Last Updated:Aug 11, 2026
Links: GitHub  ·  npm
Maintainer: liyincode

babel-plugin-vue-jsx-hmr npm

A Babel plugin that adds Vue 3 JSX and TSX HMR support to Webpack and Rspack.

Usage

Webpack and Rspack

npm i -D babel-loader @babel/core @babel/preset-typescript \
  @vue/babel-plugin-jsx babel-plugin-vue-jsx-hmr
// webpack.config.cjs or rspack.config.cjs
module.exports = {
    module: {
        rules: [
            {
                test: /\.[jt]sx?$/,
                exclude: /node_modules/,
                use: {
                    loader: 'babel-loader',
                    options: {
                        presets: ['@babel/preset-typescript'],
                        plugins: [
                            '@vue/babel-plugin-jsx',
                            'babel-plugin-vue-jsx-hmr',
                        ],
                    },
                },
            },
        ],
    },
    resolve: {
        extensions: ['.tsx', '.ts', '.jsx', '...'],
    },
    devServer: {
        hot: true,
    },
}

The plugin can remain enabled in production; Webpack and Rspack remove its injected code when HMR is disabled.

Vite

Use the official @vitejs/plugin-vue-jsx

HMR detection

HMR injection requires both conditions:

  • The component must be exported.
  • The component must be declared by calling defineComponent in a root-level variable or export declaration.

Supported patterns

import { defineComponent } from 'vue'

// named exports w/ variable declaration: ok
export const Foo = defineComponent({})

// named exports referencing variable declaration: ok
const Bar = defineComponent({ render() { return <div>Test</div> }})
export { Bar }

// default export call: ok
export default defineComponent({ render() { return <div>Test</div> }})

// default export referencing variable declaration: ok
const Baz = defineComponent({ render() { return <div>Test</div> }})
export default Baz

Unsupported patterns

// not using `defineComponent` call
export const Bar = { ... }

// not exported
const Foo = defineComponent(...)

Related Packages

@alwaysmeticulous/recorder-plugin

Meticulous plugin for Vite, Webpack, Rspack, Rsbuild, and Nuxt that injects the...

475,823 29
duplicate-dependencies-webpack-plugin

webpack plugin to find duplicated dependencies from your bundle

332,104 6
babel-helper-vue-jsx-merge-props

babel helper for vue jsx spread.

13,911,770 31
babel-plugin-transform-vue-jsx

Babel plugin for Vue 2.0 JSX

5,479,185 1,847
babel-plugin-transform-vue-tsx

Babel plugin for Vue 2.0 JSX

26,611 1,847

Version History

Version Released License
1.0.2 MIT
1.0.1 MIT
1.0.0 MIT
Pre-releases (2)
Version Released License
1.0.0-beta.2 MIT
1.0.0-beta.1 MIT