Discourse 主题组件 `'use strict'` 变更预告 - 升级后主题将失效

我目前已升级到最新的提交版本(105634435f)。我通常每周左右升级一次 Discourse,一般都不会有任何问题。但这次多个主题组件无法加载。所谓“无法加载”,是指这些组件不再显示。管理面板中的日志功能并未显示任何与这个问题相关的异常信息。许多错误似乎只是偶发事件,并且已经持续了一段时间。例如罕见的 MimeType 错误以及访问 Google DNS 的超时问题,这些情况也很少出现。

以下插件在升级后无法加载:

  • DiscoTOC
  • discourse gifs
  • Discourse Jitsi
  • Hamburger Theme Selector
  • Nav Links Component
  • Tag Icons

目前正常工作的只有:

  • Discourse Kanban
  • Easy Footer

如果需要更多信息(我想应该是需要的),我很乐意提供,请随时告知。这篇帖子主要是想提醒一下,似乎出了什么问题,而且很可能是最近某次更新导致的。抱歉信息不够详细……

4 个赞

此外,非严格模式下的 JavaScript 变量定义,例如:

xxx = 330;

而不是

var xxx = 330;

会导致 JS“未定义变量”错误。我们不得不在脚本中修改所有这些情况。

是的,某些主题组件存在问题,我们正在修复中。

9 个赞

@pmusaraj 非常感谢你。祝你好运!

您知道为什么在组件中对非严格定义的 JS 变量会抛出错误吗?这是后处理错误吗?这里有什么变化吗?

导致此问题的变更已在1小时前回滚,如果您的站点受到影响,请更新至最新版本。

9 个赞

补充一下 Falco 所说的内容:该变更将在未来几天内重新添加,但在重新添加之前,我会确保所有官方主题/组件都与该变更兼容。因此,如果您再次在官方主题/组件中遇到该问题,更新它们即可解决。

我还会发布一篇帖子,说明如何使主题/组件兼容,以帮助那些在网站上使用自定义/私有组件的用户。

对于今天带来的不便,我深表歉意。

6 个赞

我们的一款主题(横幅主题)已被完全覆盖回初始格式,我们之前进行的所有更改都已丢失。该主题自 2018 年以来未进行过任何更新。我们能否恢复这些更改?

嗯,这确实很奇怪。你是否已经再次更新了你的实例,以包含 https://github.com/discourse/discourse/commit/2b9ab3a0d91d1350188dd554764dbb4ce9837edd?你能更详细地解释一下你所说的“初始格式”是什么意思吗?你的意思是,你之前对主题的 JS/CSS 进行了本地修改,但现在这些修改都不见了?

2 个赞

这是否也解释了 JavaScript 变量定义的问题?如果是,是如何解释的?

我不认为这个问题与这个已回退的功能有关。几周前我在一个组件上遇到过类似情况,可能是在分叉指示器功能(该功能涉及插件,所以:roll_eyes:可能也不相关,但我当时不得不分叉该组件以进行修改)。

1 个赞

这真的很奇怪,我们从未遇到过这个问题。它只是随着最新版本的出现而冒了出来。我想知道这里到底发生了什么。

这是一个复杂的变更,同时也影响了主题中的“内联”JavaScript 代码。该变更已被回滚,并将在未来几天内重新调整后再次提交。您可以在 https://github.com/discourse/discourse/pull/12517 查看详细信息。

3 个赞

是的,那个更改正是导致你在主题中遇到问题的原因。我需要稍微详细地解释一下主题系统,以说明发生了什么。在 Discourse 主题或组件中添加 JS 有两种方式:第一种是在 head_tag.html 文件中使用 <script type="text/discourse-plugin"> 标签,第二种是使用独立的 JS 文件,这些文件位于你的主题或组件中名为 javascripts 的目录内。

在我今天进行更改之前,那些特殊脚本标签内的 JavaScript 是以依赖 Discourse 全局变量的方式处理的,而在使用 Ember CLI 开发 Discourse 时,该变量是不可用的。在我今天推送的更改中,我让 Discourse 将那些标签内的 JS 视为来自独立文件,从而使我们能够避免使用 Discourse 全局变量。

现在,将 JavaScript 标签视为文件的一个“副作用”是,标签内的 JavaScript 将包含 "use strict" 指令,而此前并没有该指令。该指令导致了你所看到的错误:

我建议你在主题中保留今天所做的所有更改,因为当我把我的更改加回来时,JS 标签将再次被当作独立文件处理。

6 个赞

是的,那只是我们代码中一些宽松的默认定义,在将其改为严格定义后,一切运行正常。

无论如何,感谢你更详细地解释了这一点。这对其他人可能也有帮助。

1 个赞

是的,所有修改都消失了,从 CSS、JS 的更改,甚至文本的更改都不见了::sweat: 也就是说,我的主题恢复到了初始格式,文本变成了“Lorem ipsum dolor sit amet …”。不过,我会使用备份,但升级后出现这种情况确实很奇怪。

1 个赞

你好 @Pad_Pors

我认为你的问题更与此相关。:slightly_smiling_face:

关于你提到的另一个话题:

所以我认为你有一段时间没有更新你的 Discourse 了。

4 个赞

继续在此处: