vue 由于我的模板语法错误,终端卡住了,失去了控制,

jum4pzuy  于 4个月前  发布在  其他
关注(0)|答案(4)|浏览(51)

版本

2.7.3

复现链接

github.com

复现步骤

npm install
npm run dev

预期结果

服务器正常运行,App.vue中显示语法错误;不会出现响应丢失的情况。

实际发生情况

Vue中的v-bind错误导致终端失去控制,我不得不杀死它才能重新启动。这就像一个vue-loader错误,但我不确定。

slsn1g29

slsn1g291#

这是否与系统低规格有关?

ocebsuys

ocebsuys2#

我遇到了相同的问题 - v-slot 的使用中出现了语法错误,导致程序明显冻结。
在 Windows 的 Task Manager 中查看我的构建节点.exe 占用了我整个 CPU 的核心,所以它不等待任何东西 - 相反,它似乎陷入了一个循环。
我附加了一个调试器,进行了性能分析,发现构建在这里花费了很多时间:
https://github.com/vuejs/vue-loader/blob/master/lib/loaders/templateLoader.js#L82
所以,再次运行构建并设置断点,然后逐步进入函数。看起来在 j 大于 lines.length 的情况下,它会陷入一个无限循环:
https://github.com/vuejs/vue/blob/main/src/compiler/codeframe.ts#L14-L15
我会尝试重现这个问题。

kqqjbcuj

kqqjbcuj3#

好的,我找到了这个问题的复现方法:https://github.com/spiltcoffee/vue-syntax-loop-example
奇怪的是,这个特定的错误只在使用单独的模板源文件时发生。如果我将内容放入 <template> 标签中,它就会“正常工作”(即构建完成,我能看到预期的错误)。

332nm8kg

332nm8kg4#

感谢@spiltcoffee的仓库和分析,我创建了一个修复PR。还有一个旧的PR,它修复了代码库中较旧版本的错误:#10547 ...嗯,还有另一个在这里:#12338

相关问题