Svelte新手遇无效闭合标签错误:</script>尝试关闭未打开元素
问题代码
<script> let name = 'world' </script> <input bind:value={name}> <h1> Helllo {name}! </h1>
遇到的错误
实际仅9行代码,却收到两条错误提示(已翻译为中文):
</script>尝试关闭一个未打开的元素 svelte(invalid-closing-tag) [第10行,第1列]</script>尝试关闭一个未打开的元素 js(-1) [第10行,第1列]
错误指向不存在的第10行,属于Svelte编译时的异常定位问题。
排查与解决方法
检查隐藏字符/多余标签
打开编辑器的“显示所有字符”功能(比如VS Code按Ctrl+Shift+P搜索“Toggle Render Whitespace”并开启),查看文件末尾是否有看不见的控制字符或多余的</script>标签——这类隐藏内容会被编译器识别为代码行,导致行号错位。清理缓存并重启服务
如果是用Vite+Svelte的项目,删除node_modules/.cache目录,或者直接重启开发服务器,避免旧缓存导致的编译异常。重建文件
将代码复制到一个新建的空白.svelte文件中,保存后重新运行项目,排除原文件的格式损坏问题。顺带修正拼写问题
代码里<h1>中的“Helllo”多了一个字母l,虽然不影响当前报错,但建议修正为“Hello”以避免后续不必要的混淆。
内容的提问来源于stack exchange,提问作者zaraterdz

