Vue 3 警告“带有副作用的标签”正在破坏生产

Jon*_*mon 24 javascript vue.js vuejs3

我最近从 Vue 2 升级到 Vue 3,我的应用程序的某些部分在development模式下发出警告:

[Vue warn]:模板编译错误:具有副作用的标签(<script> 和 <style>)在客户端组件模板中被忽略。

在 Vue 2 中,这些警告只是隐藏在production. 然而,在 Vue 3 中,带有这些警告的页面完全崩溃,屏幕变成空白。他们运行良好development

删除所有这些标签对我来说并不实际,<script>因为它们是由我的 CMS (Shopify) 动态插入的。

有什么方法可以让我在生产中捕获这些错误,这样它们就不会关闭我的网站吗?

Jon*_*mon 37

到目前为止,这是我找到的最好的解决方案。

代替:

<script>
  // JS CODE HERE
</script>
Run Code Online (Sandbox Code Playgroud)

和:

<component :is="'script'">
  // JS Here
</component>
Run Code Online (Sandbox Code Playgroud)

但是,我更喜欢全局设置,这样我就不必为每个插件都执行此操作。现在,如果我的团队中的任何人添加另一个 CMS 插件,我的应用程序感觉非常脆弱。

我不希望应用程序一遇到标签就崩溃<script>......

  • 这也适用于样式标签。 (4认同)

小智 11

就我而言,我<body> 首先将 id="app" 属性移至<div>,然后解决了问题

前:

<body id="app">
  <div>
    ...
  </div>
</body>
Run Code Online (Sandbox Code Playgroud)

后:

<body>
   <div id="app">
     ...
   </div>
</body>
Run Code Online (Sandbox Code Playgroud)


Br0*_*0wn 8

有点晚了,但同样的事情发生在我身上,我想我有解决方案。至少就我而言。

您必须将脚本嵌入到 index.html 中的结束正文标记之前。问题是(我想)你把它放在主 div 中。

它应该看起来像这样:

<body>
  <div id="app">
    
  </div>
  <script src="./main.js"></script>
</body>
Run Code Online (Sandbox Code Playgroud)


小智 6

就我而言,有一个 div 标签未关闭。所以我关闭了它并解决了问题。