解决vue热替换失效的根本原因


Posted in Javascript onSeptember 19, 2018

新手刚开始使用vue时,常会遇见一个坑,那就是热替换失效。

什么?你跟我说使用官方的vue-cli去构建,我就是使用vue-cli后突然失效。

什么?你跟我说重新npm run dev一下,好嘛,已经run了N次了依然没回到大路上。

经过在网上一番查找,发现基本没有这个问题的详解,可能是这个问题太低级了?

讲解一下热替换的原理:热替换是在执行npm run dev后,会启动一个本地服务器(webpack-dev-server),这个服务器会观察源代码编译出来的文件。一旦修改了源代码,就会立刻编译源代码,然后观察新编译后的文件,接下来替换。

为什么会有编译这个以过程,就是因为使用.vue开发时,浏览器不认识这种类型的文件,需要编译成js文件。

所以整个过程可以这样描述:

源代码 ---> 编译为目标代码(浏览器可以识别运行的代码) ---> 本地服务器观察目标代码 ----> 本地服务器接收到目标代码改变[事件] ----> 刷新浏览器

常见热替换失效导致的原因:

1.观察文件位置错误

{

env: require('./dev.env'),
 port: 8080,
 autoOpenBrowser: true,
 assetsSubDirectory: 'static',//必须
 assetsPublicPath: '/',

失效是为什么?是因为修改了源代码后,依然会立刻编译,但是通常被观察的新编译的文件位置错了。也就是说浏览器显示的东西与服务器观察的东西是一个位置,而编译出来文件是另外的位置。

解决办法是:config/index.js中 dev的这个参数必须为static

2.项目目录包含特殊字符

像这样的路径 D:\(myworkspace)\vue-answer-project

这种目录中有一个括号!!!就有可能在浏览器中打开后,发现console报错

http://localhost:8080/__webpack_hmr net::ERR_INCOMPLETE_CHUNKED_ENCODING

这是什么意思呢?就是热替换模块报错,中断了观察页面与热替换模块的链接,无法收到事件。

解决办法就是:去掉这样的路径

3.npm run build后,打开浏览器一片空白

这个位置是根据文件webpack.config.js中的publicPath进行指定的。也就是服务器观察位置是 publicPath: "XX/build.js"这里面的 /XX/build.js这个文件,这个文件需要你在文件 index.html中 正确引入。

// webpack编译输出的发布路径
// => 将 build 的路径前缀修改为 ' ./ '(原本为 ' / '),是因为打包(npm run build)之后,
// 外部引入 js 和 css 文件时,如果路径以 ' / ' 开头,在本地是无法找到对应文件的(服务器上没问题)
module.exports = {
 build: {
 env: require('./prod.env'),
 index: path.resolve(__dirname, '../dist/index.html'),
 assetsRoot: path.resolve(__dirname, '../dist'),
 assetsSubDirectory: 'static',
 assetsPublicPath: './',
 productionSourceMap: true,
 // Gzip off by default as many popular static hosts such as
 // Surge or Netlify already gzip all static assets for you.
 // Before setting to `true`, make sure to:
 // npm install --save-dev compression-webpack-plugin
 productionGzip: false,
 productionGzipExtensions: ['js', 'css'],
 // Run the build command with an extra argument to
 // View the bundle analyzer report after build finishes:
 // `npm run build --report`
 // Set to `true` or `false` to always turn it on or off
 bundleAnalyzerReport: process.env.npm_config_report
 },
 dev: {
 env: require('./dev.env'),
 port: 8081,
 autoOpenBrowser: true,
 assetsSubDirectory: 'static',
 assetsPublicPath: '/',
 proxyTable: {},
 // CSS Sourcemaps off by default because relative paths are "buggy"
 // with this option, according to the CSS-Loader README
 // (https://github.com/webpack/css-loader#sourcemaps)
 // In our experience, they generally work as expected,
 // just be aware of this issue when enabling this option.
 cssSourceMap: true
 }

解决办法是:在上图中的build.assetsPublicPath的值 改为 "./"

以上这篇解决vue热替换失效的根本原因就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
ASP中用Join和Array,可以加快字符连接速度的代码
Aug 22 Javascript
JQuery从头学起第三讲
Jul 06 Javascript
alert中断settimeout计时功能
Jul 26 Javascript
jQuery中document与window以及load与ready 区别详解
Dec 29 Javascript
JavaScript控制按钮可用或不可用的方法
Apr 03 Javascript
JavaScript汉诺塔问题解决方法
Apr 21 Javascript
JavaScript中实现无缝滚动、分享到侧边栏实例代码
Apr 06 Javascript
深入浅析Bootstrap列表组组件
May 03 Javascript
Bootstrap所支持的表单控件实例详解
May 16 Javascript
JavaScript实现广告弹窗效果
Aug 09 Javascript
微信小程序 input输入框控件详解及实例(多种示例)
Dec 14 Javascript
jsonp格式前端发送和后台接受写法的代码详解
Nov 07 Javascript
三种Webpack打包方式(小结)
Sep 19 #Javascript
Vue.js更改调试地址端口号的实例
Sep 19 #Javascript
vue添加axios,并且指定baseurl的方法
Sep 19 #Javascript
vue中的计算属性实例详解
Sep 19 #Javascript
Vue axios设置访问基础路径方法
Sep 19 #Javascript
json前后端数据交互相关代码
Sep 19 #Javascript
解决vue动态为数据添加新属性遇到的问题
Sep 18 #Javascript
You might like
PHP实时显示输出
2008/10/02 PHP
PHP新手NOTICE错误常见解决方法
2011/12/07 PHP
关于UEditor编辑器远程图片上传失败的解决办法
2012/08/31 PHP
PHP输出时间差函数代码
2013/01/28 PHP
PHP大批量插入数据库的3种方法和速度对比
2014/07/08 PHP
PHP简单实现欧拉函数Euler功能示例
2017/11/06 PHP
键盘控制事件应用教程大全
2006/11/24 Javascript
DB.ASP 用Javascript写ASP很灵活很好用很easy
2011/07/31 Javascript
jQuery动态添加删除select项(实现代码)
2013/09/03 Javascript
查找iframe里元素的方法可传参
2013/09/11 Javascript
js 获取、清空input type="file"的值(示例代码)
2013/12/24 Javascript
jQuery实现dialog设置focus焦点的方法
2015/06/10 Javascript
js+CSS实现模拟华丽的select控件下拉菜单效果
2015/09/01 Javascript
JS实现刷新父页面不弹出提示框的方法
2016/06/22 Javascript
JS实现websocket长轮询实时消息提示的效果
2017/10/10 Javascript
基于Vue 2.0的模块化前端 UI 组件库小结
2017/12/21 Javascript
在vue2.0中引用element-ui组件库的方法
2018/06/21 Javascript
javascript使用链接跨域下载图片
2019/11/01 Javascript
Vue设置长时间未操作登录自动到期返回登录页
2020/01/22 Javascript
uni-app从安装到卸载的入门教程
2020/05/15 Javascript
python用来获得图片exif信息的库实例分析
2015/03/16 Python
Python实现简单拆分PDF文件的方法
2015/07/30 Python
Python实现视频下载功能
2017/03/14 Python
用Python进行简单图像识别(验证码)
2018/01/19 Python
使用PIL(Python-Imaging)反转图像的颜色方法
2019/01/24 Python
python实现植物大战僵尸游戏实例代码
2019/06/10 Python
pytorch中index_select()的用法详解
2021/01/06 Python
收集的7个CSS3代码生成工具
2010/04/17 HTML / CSS
Big Green Smile德国网上商店:提供各种天然产品
2018/05/23 全球购物
绘画设计学生的个人自我评价
2013/09/20 职场文书
办公室文员工作自我鉴定
2014/09/19 职场文书
幼儿园大班个人总结
2015/02/28 职场文书
公司保密管理制度
2015/08/04 职场文书
创业计划书之情侣餐厅
2019/09/29 职场文书
Python实现文本文件拆分写入到多个文本文件的方法
2021/04/18 Python
html5中sharedWorker实现多页面通信的示例代码
2021/05/07 Javascript