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

作者:ifredom 时间:2024-04-30 10:25:57 

新手刚开始使用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的值 改为 "./"

来源:https://blog.csdn.net/win7583362/article/details/65443291

标签:vue,热替换
0
投稿

猜你喜欢

  • Javascript 获取css属性

    2009-05-31 16:49:00
  • Linux下Python安装完成后使用pip命令的详细教程

    2021-07-07 02:45:51
  • python向已存在的excel中新增表,不覆盖原数据的实例

    2022-04-26 15:16:51
  • SQL查询效率注意事项小结

    2012-01-05 19:31:25
  • 如何强制删除或恢复SQLServer正在使用的数据库

    2024-01-28 16:16:56
  • pytorch中如何设置随机种子

    2021-10-24 06:43:51
  • Linux操作系统下MySQL数据库的使用方法

    2008-12-26 09:24:00
  • Python内存映射文件读写方式

    2023-07-07 23:32:36
  • python scrapy爬虫代码及填坑

    2022-06-04 01:01:36
  • 微信 java 实现js-sdk 图片上传下载完整流程

    2024-04-29 14:08:03
  • python TKinter弹出式菜单的实例方法

    2023-03-25 05:59:54
  • 常用SQL语句词典

    2008-08-03 17:19:00
  • Python 日志logging模块用法简单示例

    2021-10-08 19:47:20
  • asp 判断上传文件中是否存在危险代码

    2011-03-17 11:19:00
  • python爬虫之爬取笔趣阁小说

    2021-09-19 19:18:05
  • Python实现简单的多任务mysql转xml的方法

    2024-01-26 20:11:07
  • Python+folium绘制精美地图的示例详解

    2023-07-26 13:17:06
  • 关于Vue的URL转跳与参数传递方式

    2024-05-09 09:06:02
  • Python爬虫工具requests-html使用解析

    2021-10-23 02:20:27
  • 简单谈谈GET和POST有什么区别

    2022-06-06 04:53:41
  • asp之家 网络编程 m.aspxhome.com