当前位置:首页 > VUE

vue实现热更新

2026-03-29 08:57:55VUE

Vue 热更新实现方法

热更新(Hot Module Replacement, HMR)是指在应用运行过程中替换、添加或删除模块,而无需重新加载整个页面。Vue 通过 Vue CLI 和 webpack 提供了开箱即用的热更新支持。

使用 Vue CLI 创建项目

Vue CLI 内置了 webpack 的热更新功能,创建项目时会自动配置好 HMR。

vue create my-project
cd my-project
npm run serve

运行 npm run serve 后,修改组件代码会触发热更新,页面无需刷新即可看到变化。

手动配置 webpack 热更新

对于自定义 webpack 配置的项目,需要手动设置 HMR。

安装必要依赖:

npm install webpack webpack-dev-server webpack-hot-middleware vue-loader --save-dev

配置 webpack.dev.js:

const webpack = require('webpack')
const { VueLoaderPlugin } = require('vue-loader')

module.exports = {
  mode: 'development',
  entry: [
    'webpack-hot-middleware/client',
    './src/main.js'
  ],
  devServer: {
    hot: true,
    open: true
  },
  module: {
    rules: [
      {
        test: /\.vue$/,
        loader: 'vue-loader'
      }
    ]
  },
  plugins: [
    new VueLoaderPlugin(),
    new webpack.HotModuleReplacementPlugin()
  ]
}

配置 main.js 启用 HMR

在项目入口文件中添加 HMR 相关代码:

import Vue from 'vue'
import App from './App.vue'

const app = new Vue({
  render: h => h(App)
}).$mount('#app')

if (module.hot) {
  module.hot.accept('./App.vue', () => {
    app.$destroy()
    new Vue({
      render: h => h(App)
    }).$mount('#app')
  })
}

解决常见热更新问题

组件状态丢失:使用 vue-hot-reload-api 保持状态

npm install vue-hot-reload-api --save-dev

在组件中添加:

if (module.hot) {
  const api = require('vue-hot-reload-api')
  api.install(Vue)

  if (!api.compatible) {
    throw new Error('vue-hot-reload-api is not compatible with the version of Vue you are using.')
  }

  module.hot.accept()
}

样式不更新:确保 style-loader 配置正确

{
  test: /\.css$/,
  use: [
    'style-loader',
    'css-loader'
  ]
}

优化热更新速度

使用 cache-loader 缓存编译结果:

npm install cache-loader --save-dev

配置 webpack:

{
  test: /\.vue$/,
  use: [
    'cache-loader',
    'vue-loader'
  ]
}

启用持久化缓存:

vue实现热更新

const HardSourceWebpackPlugin = require('hard-source-webpack-plugin')

plugins: [
  new HardSourceWebpackPlugin()
]

标签: vue
分享给朋友:

相关文章

vue实现rtc

vue实现rtc

Vue 实现 RTC 的步骤 安装依赖 在 Vue 项目中安装 WebRTC 相关依赖,如 simple-peer 或 peerjs,用于简化 WebRTC 的实现。 运行以下命令安装 simple-…

vue tab实现

vue tab实现

Vue Tab 实现方法 使用动态组件实现 Tab 在 Vue 中可以通过动态组件 <component :is="currentTab"> 结合 v-for 和 v-bind 实现 Ta…

vue滚动实现

vue滚动实现

Vue 滚动实现方法 使用原生滚动 在 Vue 中可以通过 ref 获取 DOM 元素,调用原生滚动方法实现滚动效果。适用于简单场景。 <template> <div ref=…

vue实现导出

vue实现导出

Vue 实现导出功能的方法 在 Vue 项目中实现导出功能通常涉及将数据导出为 Excel、CSV 或其他格式。以下是几种常见的实现方式: 使用 xlsx 库导出 Excel 安装 xlsx 库:…

vue 实现树状

vue 实现树状

Vue 实现树状结构的方法 递归组件实现树状结构 递归组件是 Vue 中实现树状结构的常见方法。通过组件自身调用自身,可以轻松构建多层级树状结构。 <template> <ul…

vue实现flvvideo

vue实现flvvideo

vue-flv-player 实现 FLV 视频播放 安装依赖包 npm install flv.js vue-flv-player 基础组件引入 <template> <v…