关于vue-cli3+webpack热更新失效及解决

关于vue-cli3+webpack热更新失效及解决,我将为您提供完整的攻略。

问题描述

在使用vue-cli3+webpack进行开发时,有时候会发现修改代码后页面没有自动刷新,导致热更新失效。这是因为webpack-dev-server的默认watch机制有问题,解决这个问题可以采用以下方案。

解决方案

方案一:关闭webpack的watch机制,使用webpack-dev-middleware手动编译打包文件

在vue.config.js文件中进行如下配置:

const webpack = require('webpack')

module.exports = {
  configureWebpack: config => {
    if (process.env.NODE_ENV === 'development') {
      config.plugins.push(new webpack.HotModuleReplacementPlugin())
    }
  },
  devServer: {
    watchOptions: {
      ignored: /node_modules/,
      aggregateTimeout: 300,
      poll: 1000
    },
    before(app, server, compiler) {
      compiler.plugin('done', () => {
        const memFs = server._memFs = server._memFs || compiler.outputFileSystem
        Object.keys(memFs.data).forEach((filename) => {
          if (/\.html$/.test(filename)) {
            const rawData = memFs.data[filename]
            const data = (rawData instanceof Buffer) ? rawData.toString('utf-8') : rawData
            server.middleware.waitUntilValid(() => {
              server.middleware.invalidate()
              server.middleware.waitUntilValid(() => {
                memFs.writeFileSync(filename, data)
              })
            })
          }
        })
      })
    },
    hot: true
  }
}

这里我们做了一些打包编译的优化,配合webpack-dev-middleware手动编译打包文件。注意,如果发现编译过程中提示npm run serve编译错误无法解析.vue文件,需要在文件中加入这些代码:

const VueLoaderPlugin = require('vue-loader/lib/plugin')

module.exports = {
  configureWebpack: {
    plugins: [
      new VueLoaderPlugin()
    ]
  }
}

方案二:修改webpack-dev-server的watchOptions配置

在vue.config.js文件中进行如下配置:

module.exports = {
  devServer: {
    watchOptions: {
      ignored: /node_modules/,
      aggregateTimeout: 300,
      poll: 1000
    },
    hot: true,
    inline: true,
    overlay: true
  }
}

重点在于watchOptions的配置,可以调整ignored属性来忽略不需要watch的目录文件,aggregateTimeout和poll值的调整可以影响文件监控的频率。

示例说明

示例一:采用方案一解决vue-cli3+webpack热更新失效问题

在vue.config.js文件中添加以上方案一的代码,并启动项目。修改代码后,保存后自动刷新页面,热更新生效。

示例二:采用方案二解决vue-cli3+webpack热更新失效问题

在vue.config.js文件中添加以上方案二的代码,并启动项目。修改代码后,保存后自动刷新页面,热更新生效。

以上就是关于vue-cli3+webpack热更新失效及解决的完整攻略,希望对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:关于vue-cli3+webpack热更新失效及解决 - Python技术站

(1)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • 详解Vue2.X的路由管理记录之 钩子函数(切割流水线)

    标题:详解Vue2.X的路由管理记录之钩子函数(切割流水线) Vue.js是一个流行的JavaScript框架,它提供了很多功能,其中一个最重要的功能是路由管理。Vue Router是Vue.js官方提供的路由管理器。在Vue Router中,钩子函数是一个可以帮助我们控制路由导航状态的强大工具。在本文中,我们将详细讲解Vue2.X中的路由钩子函数及其用法,…

    Vue 2023年5月28日
    00
  • vue elementUI 表单校验功能之数组多层嵌套

    我将为您提供关于“vue elementUI 表单校验功能之数组多层嵌套”的完整攻略。 1. 前置知识 在学习“vue elementUI 表单校验功能之数组多层嵌套”前,需要掌握以下知识点: Vue.js基础使用方法 Vue组件和Props使用方法 ElementUI表单组件使用方法 2. 数组多层嵌套表单校验方法 默认情况下,ElementUI只针对表单…

    Vue 2023年5月29日
    00
  • iview实现动态表单和自定义验证时间段重叠

    iView是一款基于Vue.js的UI框架,可以快速搭建美观、易用的网页应用程序。在iView中实现动态表单和自定义验证时间段重叠的功能,需要深入了解iView的表单组件和验证组件。 实现动态表单 在iView中,通过<Form :model=”formData”>和<FormItem>标签可以构建表单。动态表单的实现需要以下步骤: …

    Vue 2023年5月29日
    00
  • Vue自定义可以选择日期区间段的日历插件

    首先我们需要明确自定义可以选择日期区间段的日历插件的功能需求: 显示当前月份的日历,默认选中日期为今天 允许用户选择日期区间,可以选择起始日期和结束日期 用户可以通过下拉菜单选择年份和月份 用户可以通过左右箭头切换月份,以便查看以前或以后的日期 用户选择日期区间后,插件需提供可配置的回调函数回传所选日期区间 为了实现以上需求,我们可以选择Vue.js作为前端…

    Vue 2023年5月29日
    00
  • Vue双向绑定原理及实现方法

    Vue双向绑定原理及实现方法 1. 什么是Vue双向绑定 双向绑定是Vue框架重要的特点之一,意味着当数据发生改变时,视图会随之发生变化,同时视图的修改也会同步到数据中。这种机制使得开发者只需要关注逻辑的实现而不用担心数据如何与视图同步,便于提高开发效率和减少出错概率。 2. 双向绑定原理 Vue中的双向绑定原理主要是通过以下几个步骤实现的: 数据劫持 首先…

    Vue 2023年5月28日
    00
  • vue3+ts+Vuex中使用websocket协议方式

    下面我将详细讲解在基于Vue3和TypeScript的项目中使用WebSocket协议方式的完整攻略,包括以下内容: 配置WebSocket连接 Vuex中管理WebSocket连接 发送和接收WebSocket消息 我们将使用Vue3和TypeScript构建一个简单的聊天室应用程序,该应用程序使用WebSocket协议进行通信。 配置WebSocket连…

    Vue 2023年5月28日
    00
  • vue项目main.js配置及使用方法

    下面是关于“vue项目main.js配置及使用方法”的完整攻略: 什么是main.js 在Vue.js项目中,main.js是一个非常重要的文件,它是Vue.js的入口文件,用于配置Vue.js的基本内容、初始化Vue.js的实例、路由、数据管理等功能,是整个Vue.js应用程序的核心所在。 main.js的配置和使用方法 引入Vue.js main.js文…

    Vue 2023年5月28日
    00
  • vue实现动态给data函数中的属性赋值

    要实现动态地给Vue的data函数中的属性赋值,可以使用Vue.set()方法或this.$set()方法。这两个方法的作用是一样的,都可以在不直接修改对象的情况下更新响应式数据。 具体方法如下: 使用Vue.set() Vue.set()方法接收三个参数,分别是需要更新的对象、需要更新的属性名以及属性值。 例如,假设data函数返回的对象如下: data(…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部