解决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 相关文章推荐
jquery删除ID为sNews的tr元素的内容
Apr 10 Javascript
浅谈javascript的分号的使用
May 12 Javascript
JS禁止查看网页源代码的实现方法
Oct 12 Javascript
微信小程序模板之分页滑动栏
Feb 10 Javascript
angular bootstrap timepicker TypeError提示怎么办
Jun 13 Javascript
详解angular应用容器化部署
Aug 14 Javascript
基于AngularJs select绑定数字类型的问题
Oct 08 Javascript
详解Node.js 中使用 ECDSA 签名遇到的坑
Nov 26 Javascript
React中使用UMEditor的方法示例
Dec 27 Javascript
详解JavaScript之ES5的继承
Jul 08 Javascript
解决vue net :ERR_CONNECTION_REFUSED报错问题
Aug 13 Javascript
Javascript var变量删除原理及实现
Aug 26 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+mysql留言本源码
2009/11/11 PHP
php 学习资料零碎东西
2010/12/04 PHP
PHP获取QQ达人QQ信息的方法
2015/03/05 PHP
浅谈php中的循环while、do...while、for、foreach四种循环
2016/11/05 PHP
php监测数据是否成功插入到Mysql数据库的方法
2016/11/25 PHP
PHP-X系列教程之内置函数的使用示例
2017/10/16 PHP
PHP实现Huffman编码/解码的示例代码
2018/04/20 PHP
php写入txt乱码的解决方法
2019/09/17 PHP
js 获取浏览器高度和宽度值(多浏览器)
2009/09/02 Javascript
jQuery 类twitter的文本字数限制带提示效果插件
2010/04/16 Javascript
iframe 父窗口和子窗口相互的调用方法集锦
2010/12/15 Javascript
JavaScript中通过prototype属性共享属性和方法的技巧实例
2015/03/13 Javascript
Vue.js组件tabs实现选项卡切换效果
2016/12/01 Javascript
JavaScript之map reduce_动力节点Java学院整理
2017/06/29 Javascript
关于vue的语法规则检测报错问题的解决
2018/05/21 Javascript
基于node简单实现RSA加解密的方法步骤
2019/03/21 Javascript
微信小程序实现Session功能及无法获取session问题的解决方法
2019/05/07 Javascript
vue实现登录页面的验证码以及验证过程解析(面向新手)
2019/08/02 Javascript
Python中的CURL PycURL使用例子
2014/06/01 Python
python基础教程之循环介绍
2014/08/29 Python
Python常用的文件及文件路径、目录操作方法汇总介绍
2015/05/21 Python
发布你的Python模块详解
2016/09/15 Python
Python入门_浅谈逻辑判断与运算符
2017/05/16 Python
Python实现1-9数组形成的结果为100的所有运算式的示例
2017/11/03 Python
PyTorch快速搭建神经网络及其保存提取方法详解
2018/04/28 Python
详解Python3中setuptools、Pip安装教程
2019/06/18 Python
详解Python 字符串相似性的几种度量方法
2019/08/29 Python
python中栈的原理及实现方法示例
2019/11/27 Python
OpenCV+python实现实时目标检测功能
2020/06/24 Python
巴西男士个人护理产品商店:SHOP4MEN
2017/08/07 全球购物
eDreams葡萄牙:全球最大的在线旅行社之一
2019/04/15 全球购物
元旦寄语大全
2014/04/10 职场文书
单位单身证明样本
2014/10/11 职场文书
2014年党员个人工作总结
2014/12/02 职场文书
毕业论文致谢怎么写
2015/05/14 职场文书
mysql中between的边界,范围说明
2021/06/08 MySQL