Replies: 3 comments
-
@AhkunTa 跟 Monaco 注册相关的问题还有这里的 由于我们框架内的 Monaco 是在渲染阶段去引入并初始化的,会导致渲染时机过早而无法正确完成首次语言配置的识别,最终导致需要用户手动 因为这层逻辑,我们还在 |
Beta Was this translation helpful? Give feedback.
-
主要问题OpenSumi 内部注册 OpenSumiContextKeyService 来 override monaco 内部的 MonacoContextKeyService core/packages/editor/src/browser/editor.contribution.ts Lines 191 to 215 in 9a1e368 而在 dispose 后重新渲染组件, 但在 monaco 内部的 此时在opensumi 和 monaco 存在两个 如下图 寻找不到 37 的 contextId 解决方法1.全局单例 ContextKeyService 并在dispose 后获取 monaco 内部ContextKeyService 作为OpenSumi内新实例2.可能需要 注册 StandaloneKeybindingService 的 override |
Beta Was this translation helpful? Give feedback.
-
是否可以采用一些微前端的方案?让 monaco 的 context 是我们可以控制的,这样我们就可以销毁它。 |
Beta Was this translation helpful? Give feedback.
-
背景
OpenSumi 内使用 Monaco 编辑器作为基础编辑器,但 Monaco 编辑器为全局单例并且只能这样引入,初始化时 OpenSumi 会 override Monaco 内部的各个功能点如:
当作为组件嵌入页面时会存在组件销毁重新渲染,当重新渲染组件时 Monaco 内部并不会更新新的 override 的注入, 只会初始化一次相关代码
这就会导致重新渲染后,再次编辑内部编辑器表现出各种问题 快捷键,交互,命令等。
解决方案
1.修改 Monaco
不推荐改动,整体 Monaco 内部交互复杂,并且 Monaco 每次升级会伴随新的 break changes,会导致升级新版 Monaco 越来越困难
2.涉及的模块相应改造
打算将 Monaco 初始化 override 的模块改造为全局单例并且在销毁后 proxy 到最新的 injector 动态实例上,从而使用新的动态实例
改造清单
测试范围
待补充
Beta Was this translation helpful? Give feedback.
All reactions