首页 > 解决方案 > ReferenceError:初始化前无法访问“ShareJS”

问题描述

我正在使用流星构建一个协作文本编辑器 Web 应用程序。同样,我添加了一个名为“mizzao:sharejs-codemirror”的包,之后我的应用程序在启动时崩溃并显示以下错误

ReferenceError: Cannot access 'ShareJS' before initialization
at module (packages/mizzao:sharejs/sharejs-server.js:8:24)
at fileEvaluate (packages\modules-runtime.js:336:7)
at Module.require (packages\modules-runtime.js:238:14)
at require (packages\modules-runtime.js:258:21)
at D:\Workspace\web\course4\week (1)\textcircle\.meteor\local\build\programs\server\packages\mizzao_sharejs.js:130:15
at D:\Workspace\web\course4\week (1)\textcircle\.meteor\local\build\programs\server\packages\mizzao_sharejs.js:135:3
at D:\Workspace\web\course4\week (1)\textcircle\.meteor\local\build\programs\server\boot.js:401:38
at Array.forEach (<anonymous>)
at D:\Workspace\web\course4\week (1)\textcircle\.meteor\local\build\programs\server\boot.js:226:21
at D:\Workspace\web\course4\week (1)\textcircle\.meteor\local\build\programs\server\boot.js:464:7
at Function.run (D:\Workspace\web\course4\week (1)\textcircle\.meteor\local\build\programs\server\profile.js:280:14)
at D:\Workspace\web\course4\week (1)\textcircle\.meteor\local\build\programs\server\boot.js:463:13

谁能告诉我哪里可能出错了谢谢。

标签: meteorsharejs

解决方案


看起来来自这一行

export const ShareJS = ShareJS || {};

正如错误所说,它试图将变量 ShareJS 分配给 ShareJS 的内容,直到表达式完成后才定义。

这在较旧的 Meteor 版本中可以工作,因为为了支持较旧的浏览器const,声明被转换为var(使用一些帮助程序来防止重新分配)。最近,Meteor 开始为现代浏览器制作现代包,这些包让代码const保持不变。

不幸的是,这段代码从一开始就不正确,但直到现在才显示为错误。

最简单的方法是自己编辑该行。您可以通过从 github 下载源代码到packages您的应用程序文件夹中来创建本地分支。然后将 更改constvar

您将需要编辑sharejs-base包。

或者,您可以使用来自 npm 的最新版本的 ShareJS,并自己实现服务器和客户端部分。


推荐阅读