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

yizhihongxing

关于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日

相关文章

  • 详解Vue生命周期和MVVM框架

    让我详细讲解”详解Vue生命周期和MVVM框架”的完整攻略。 首先,让我们来了解一下Vue生命周期。Vue组件有8个生命周期钩子函数,可以在Vue组件的生命周期中执行一些操作。 组件实例的生命周期可以分为四个阶段:创建、挂载、更新、销毁。下面是Vue生命周期的详细解释: 创建 beforeCreate:在实例初始化之后,数据观测(data observer)…

    Vue 2023年5月28日
    00
  • 详解Vue与VueComponent的关系

    详解 Vue 与 Vue Component 的关系 Vue 是一款流行的前端框架,使用 Vue 可以方便地实现动态数据绑定、组件化以及声明式渲染等功能。而 Vue Component 则是 Vue 框架中组件的概念。本文将详细讲解 Vue 和 Vue Component 的关系,并通过两条示例说明。 Vue 和 Vue Component 的关系 Vue …

    Vue 2023年5月27日
    00
  • vue的自定义指令传参方式

    下面是关于Vue自定义指令传参的攻略: 什么是Vue自定义指令 在Vue中,除了内置的指令(v-if、v-for、v-bind等)之外,还可以自定义指令,Vue提供了一个directive方法用于自定义指令,语法如下: Vue.directive(‘指令名称’, { // 指令选项 }) 其中,指令名称为自定义指令的名称,指令选项是一个对象,包含了一些指令相…

    Vue 2023年5月27日
    00
  • Vue过滤器,生命周期函数和vue-resource简单介绍

    一、Vue过滤器 Vue过滤器是对要显示的数据进行加工处理后再呈现给用户的功能。它通过在插值表达式中使用管道字符“|”来实现,如下面的示例: <p>{{ message | capitalize }}</p> 在上述示例中,“capitalize”是一个自定义的过滤器名称,它会将message的值转化为所有单词首字母大写的形式。定义这…

    Vue 2023年5月28日
    00
  • Vue数据更新但页面没有更新的多种情况问题及解决

    问题描述: 在使用Vue时,我们发现有些时候,数据更新了,但页面并没有及时更新,这是一个非常常见的问题。 解决方案: 异步更新问题 当我们使用Vue异步更新数据时,如果不使用vm.$nextTick(),数据更新之后页面并不会立刻进行更新。 例如,在下面这个例子中,我们在点击按钮之后更新了msg的值,但是页面上的内容并没有更新。 <template&g…

    Vue 2023年5月27日
    00
  • VSCode写vue项目一键生成.vue模版,修改定义其他模板的方法

    如果您想在VSCode中快速地生成.vue文件的模板代码,可以使用Vue VSCode Snippets插件。这个插件提供了一系列可以用于在Vue项目中快速生成模板代码的人性化代码片段,例如template、script等。不仅如此,这个插件还支持自定义模板,您可以修改定义对于其他模板的方法,以实现更加高效的开发。 下面是详细的操作过程: 安装Vue VSC…

    Vue 2023年5月28日
    00
  • vue3.0安装Element ui及矢量图使用方式

    下面是详细讲解“vue3.0安装Element ui及矢量图使用方式”的完整攻略。 Vue3.0安装Element UI Element UI是一套基于Vue.js 2.0的UI框架,提供了大量的组件和样式。下面是安装Element UI的步骤: 步骤一:安装Element UI 可以使用npm来安装Element UI,在命令行中输入以下命令: npm i…

    Vue 2023年5月28日
    00
  • 如何在Vue中使localStorage具有响应式(思想实验)

    如何在Vue中使localStorage具有响应式(思想实验): Vue提供内置的响应式系统,但是localStorage并不支持响应式。我们可以通过利用Vue的响应式系统来将LocalStorage具有响应式。 步骤: 1.创建Vue组件 首先,我们需要创建一个Vue组件并在数据中引入存储在localStorage中的值。在这里,我们将使用localSto…

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