在原有项目新增功能需求模块开发的过程中,发现无论哪一个模板中的created函数都被执行了两次,遂非常熟练的打开了百度…
网络上的解决办法有:
- 解决方案1:检查main.js 中是否重复声明vue实例 (没有, pass)
- 解决方案2:据说使用了mixin的会调用两次 (尝试用一个干净的vue项目,使用一个简单的mixin文件,发现并没有执行两遍,把本项目的app文件其他内容全都注释,只留纯净的初始版本,发现也会调用两次。pass)
- 解决方案3:说什么路由配置问题(直接注掉路由的引用,还是调用了两遍,pass)
- 解决方案4:v-if引起,改成v-show (没用,pass)
网上找的方案都无法解决之后,开始自个一个一个点的排查。。。在追踪问题根源的最后,把main.js中所有其他的引用全部注释了,把app中的其他代码也全都注释了,只留下最初创建的项目代码,就这样,main.js还执行了两遍,那应该跟这些代码都没有干系!!!(#゚Д゚)于是打开index.html,看见如下代码:
这里是遍历js文件,在html中手动引入一遍。
那么如果原来默认的自动注入没有取消,就会导致所有的js重复引用一遍,即main.js会调用两次,即生命周期钩子函数会调用两次,啊问题就出在这里。因为在vue配置文件中,仅对生产环境取消了js默认注入,而本地开发环境还是正常处理,导致在开发环境的js重复引用,最终生命周期函数重复执行。
ps:
- html-webpack-plugin 配置项中有一个inject属性
- true|body:所有JavaScript资源插入到body元素的底部
- head:所有JavaScript资源插入到head元素中
- false:所有静态资源css和JavaScript都不会注入到模板文件中
找问题的同时学到了,奈斯~