解决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 相关文章推荐
cnblogs 代码高亮显示后的代码复制问题解决实现代码
Dec 14 Javascript
js触发asp.net的Button的Onclick事件应用
Feb 02 Javascript
javascript根据时间生成m位随机数最大13位
Oct 30 Javascript
JavaScript 开发工具webstrom使用指南
Dec 09 Javascript
jQuery中hide()方法用法实例
Dec 24 Javascript
Jquery ajax加载等待执行结束再继续执行下面代码操作
Nov 24 Javascript
jqueryMobile 动态添加元素,展示刷新视图的实现方法
May 28 Javascript
解决jQuery ajax请求在IE6中莫名中断的问题
Jun 20 Javascript
Angular 路由route实例代码
Jul 12 Javascript
利用Javascript实现一套自定义事件机制
Dec 14 Javascript
微信小程序实现登录注册tab切换效果
Dec 29 Javascript
vue自定义键盘信息、监听数据变化的方法示例【基于vm.$watch】
Mar 16 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
在smarty模板中使用PHP函数的方法
2011/04/23 PHP
php中调用其他系统http接口的方法说明
2014/02/28 PHP
jquery中常用的SET和GET
2009/01/13 Javascript
JQuery 表格操作(交替显示、拖动表格行、选择行等)
2009/07/29 Javascript
javascript 事件绑定问题
2011/01/01 Javascript
jquery获得下拉框值的代码
2011/08/13 Javascript
jquery js 获取时间差、时间格式具体代码
2013/06/05 Javascript
JAVASCRIPT函数作用域和提前声明 分享
2013/08/22 Javascript
js取模(求余数)隔行变色
2014/05/15 Javascript
jQuery插件制作之全局函数用法实例
2015/06/01 Javascript
JavaScript如何实现对数字保留两位小数一位自动补零
2015/12/18 Javascript
jQuery实现模仿微博下拉滚动条加载数据效果
2015/12/25 Javascript
JS实现表单多文件上传样式美化支持选中文件后删除相关项
2016/09/30 Javascript
javaScript基础详解
2017/01/19 Javascript
深入理解Angularjs中$http.post与$.post
2017/05/19 Javascript
微信小程序实现点击按钮修改字体颜色功能【附demo源码下载】
2017/12/05 Javascript
vue init失败简单解决方法(终极版)
2017/12/22 Javascript
js实现前面自动补全位数的方法
2018/10/10 Javascript
详解微信小程序与内嵌网页交互实现支付功能
2018/10/22 Javascript
大转盘抽奖小程序版 转盘抽奖网页版
2020/04/16 Javascript
Ant Design moment对象和字符串之间的相互转化教程
2020/10/27 Javascript
[00:12]DAC SOLO赛卫冕冠军 VG.Paparazi灬展现SOLO技巧
2018/04/06 DOTA
Python函数中定义参数的四种方式
2014/11/30 Python
python打开使用的方法
2019/09/30 Python
德国网上超市:myTime.de
2019/08/26 全球购物
Yahoo-PHP面试题3
2012/01/14 面试题
weblogic面试题
2016/03/07 面试题
专科毕业生学习生活的自我评价
2013/10/26 职场文书
师范应届生语文教师求职信
2013/10/29 职场文书
家教广告词
2014/03/19 职场文书
2014年党的群众路线教育实践活动总结
2014/04/25 职场文书
祖国在我心中演讲稿(小学生)
2014/09/23 职场文书
建筑技术负责人岗位职责
2015/04/13 职场文书
社区服务活动感想
2015/08/11 职场文书
小学班级标语口号大全
2015/12/26 职场文书
解决pycharm下载库时出现Failed to install package的问题
2021/09/04 Python