解决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 相关文章推荐
fix-ie5.js扩展在IE5下不能使用的几个方法
Aug 20 Javascript
checkbox 复选框不能为空
Jul 11 Javascript
理解Javascript_02_理解undefined和null
Oct 11 Javascript
javascript预览上传图片发现的问题的解决方法
Nov 25 Javascript
淘宝搜索框效果实现分析
Mar 05 Javascript
分享27个jQuery 表单插件集合推荐
Apr 25 Javascript
confirm的用法示例用于按钮操作时确定是否执行
Jun 19 Javascript
JavaScript实现页面5秒后自动跳转的方法
Apr 16 Javascript
jQuery平滑旋转幻灯片特效代码分享
Sep 07 Javascript
基于JavaScript代码实现pc与手机之间的跳转
Dec 23 Javascript
JavaScript中严格判断NaN的方法
Feb 16 Javascript
vue-router为激活的路由设置样式操作
Jul 18 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编写大型网站问题集
2007/03/06 PHP
php 格式化数字的时候注意数字的范围
2010/04/13 PHP
php小经验:解析preg_match与preg_match_all 函数
2013/06/29 PHP
浅谈PHP Cookie处理函数
2016/06/10 PHP
php 使用expat方式解析xml文件操作示例
2019/11/26 PHP
js,jQuery 排序的实现代码,网页标签排序的实现,标签排序
2011/04/27 Javascript
js的延迟执行问题分析
2014/06/23 Javascript
AngularJS 单元测试(二)详解
2016/09/21 Javascript
Angular2 多级注入器详解及实例
2016/10/30 Javascript
Vue.js组件tab实现选项卡切换
2020/03/23 Javascript
Angular.js中处理页面闪烁的方法详解
2017/03/09 Javascript
利用jquery如何从json中读取数据追加到html中
2017/12/01 jQuery
js实现搜索栏效果
2018/11/16 Javascript
详解微信图片防盗链“此图片来自微信公众平台 未经允许不得引用”的解决方案
2019/04/04 Javascript
微信小程序实现侧边分类栏
2019/10/21 Javascript
ant design 日期格式化的实现
2020/10/27 Javascript
[02:33]2018DOTA2亚洲邀请赛赛前采访——LGD
2018/04/04 DOTA
Python编写检测数据库SA用户的方法
2014/07/11 Python
深入学习Python中的上下文管理器与else块
2017/08/27 Python
python取代netcat过程分析
2018/02/10 Python
Python实现的当前时间多加一天、一小时、一分钟操作示例
2018/05/21 Python
Python continue语句实例用法
2020/02/06 Python
实现ECharts双Y轴左右刻度线一致的例子
2020/05/16 Python
详解Python 循环嵌套
2020/07/09 Python
python对批量WAV音频进行等长分割的方法实现
2020/09/25 Python
使用Python将xmind脑图转成excel用例的实现代码(一)
2020/10/12 Python
世界上最好的精品店:Shoptiques
2018/02/05 全球购物
农药学硕士毕业生自荐信
2013/09/25 职场文书
《三个小伙伴》教学反思
2014/04/11 职场文书
小学课外活动总结
2014/07/09 职场文书
电焊工岗位工作职责
2014/07/09 职场文书
授权委托书范本(单位)
2014/09/28 职场文书
仓库统计员岗位职责
2015/04/14 职场文书
初中历史教学反思
2016/02/19 职场文书
管理者们如何制定2019年的工作计划?
2019/07/01 职场文书
常用的Python代码调试工具总结
2021/06/23 Python