解决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批量修改记录的代码
Jun 25 Javascript
javascript工厂方式定义对象
Dec 26 Javascript
JavaScript中的toLocaleLowerCase()方法使用详解
Jun 06 Javascript
Bootstrap精简教程中秋大放送
Sep 15 Javascript
jquery实现限制textarea输入字数的方法
Sep 06 jQuery
angularJs中$http获取后台数据的实例讲解
Aug 08 Javascript
js变量值传到php过程详解 将php解析成数据
Jun 26 Javascript
layui中select,radio设置不生效的解决方法
Sep 05 Javascript
Javascript地址引用代码实例解析
Feb 25 Javascript
Element Popover 弹出框的使用示例
Jul 26 Javascript
vue移动端下拉刷新和上滑加载
Oct 27 Javascript
React如何使用axios请求数据并把数据渲染到组件
Aug 05 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
全国FM电台频率大全 - 31 新疆维吾尔族自治区
2020/03/11 无线电
使用zend studio for eclipse不能激活代码提示功能的解决办法
2009/10/11 PHP
laravel 中如何使用ajax和vue总结
2017/08/16 PHP
PHP CURL与java http使用方法详解
2018/01/26 PHP
“不能执行已释放的Script代码”错误的原因及解决办法
2007/09/09 Javascript
jQuery 处理表单元素的代码
2010/02/15 Javascript
JQuery自适应IFrame高度(支持嵌套 兼容IE,ff,safafi,chrome)
2011/03/28 Javascript
用JS将搜索的关键字高亮显示实现代码
2013/11/08 Javascript
javascript删除数组元素并且数组长度减小的简单实例
2014/02/14 Javascript
js点击事件链接的问题解决
2014/04/25 Javascript
基于jQuery实现网页进度显示插件
2015/03/04 Javascript
jQuery实现分隔条左右拖动功能
2015/11/21 Javascript
RequireJS使用注意细节
2016/05/15 Javascript
Vue.js常用指令汇总(v-if、v-for等)
2016/11/03 Javascript
vue实现选项卡及选项卡切换效果
2018/04/24 Javascript
jquery3和layui冲突导致使用layui.layer.full弹出全屏iframe窗口时高度152px问题
2019/05/12 jQuery
[01:02:00]DOTA2-DPC中国联赛 正赛 Elephant vs IG BO3 第三场 1月24日
2021/03/11 DOTA
python选择排序算法实例总结
2015/07/01 Python
python生成excel的实例代码
2017/11/08 Python
使用Python通过win32 COM实现Word文档的写入与保存方法
2018/05/08 Python
Python 可变类型和不可变类型及引用过程解析
2019/09/27 Python
PyTorch使用cpu加载模型运算方式
2020/01/13 Python
Scrapy+Selenium自动获取cookie爬取网易云音乐个人喜爱歌单
2021/02/01 Python
HTML5移动端开发遇见的东西
2019/10/11 HTML / CSS
用HTML5制作一个简单的弹力球游戏
2015/05/12 HTML / CSS
荷兰音乐会和音乐剧门票订购网站:Topticketshop
2019/08/27 全球购物
Internal修饰符有什么含义
2013/07/10 面试题
医生党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
校园新闻广播稿5篇
2014/10/10 职场文书
2015年办公室个人工作总结
2015/04/20 职场文书
农业项目合作意向书
2015/05/08 职场文书
提档介绍信范文
2015/10/22 职场文书
《神奇的鸟岛》教学反思
2016/02/22 职场文书
导游词之永济鹳雀楼
2020/01/16 职场文书
使用MybatisPlus打印sql语句
2022/04/22 SQL Server
VW、VH适配移动端的解决方案与常见问题
2023/05/21 HTML / CSS