引用 'monaco-editor/esm/vs/editor/editor.api' 导致出现循环引用问题
@Cythia828 ya está trabajando en esto.
Desde el 8/4/2025.
Evaluación
Este issue todavía no se ha evaluado.
Descripción
description
如图,在 filter/monaco-editor-core 导出了 'monaco-editor/esm/vs/editor/editor.api'。
在项目中,配置官方提供的 plugin monaco-editor-webpack-plugin。查看 plugin 的源码可知:
这个 plugin 在本地编译 / 打包时,会匹配 editor.api.js 和 editor.main.js,使用 loader 处理,loader 中干了什么呢?
可以看到,language 的 导入语句 会在最后被写入(在上一张图中可以看到 post 表示 language 集合)。
下图是本地启动后,webpack 热更新生成的临时文件,可以看到 plugin 的效果。
在项目中,导入 monaco-sql-language ,在其中导出的内容中, monaco-sql-languages/esm/_.contribution.js 文件中导入了 './fillers/monaco-editor-core'。monaco-editor-core 导出 monaco-editor/esm/vs/editor/editor.api。即:
// app.js
import { LanguageIdEnum, setupLanguageFeatures } from 'monaco-sql-languages';
...
// monaco-sql-languages/main.js
export * from './_.contribution';
// monaco-sql-languages/esm/_.contribution.js
import { languages } from './fillers/monaco-editor-core';
// monaco-sql-languages/esm/fillers/monaco-editor-core
export * from 'monaco-editor/esm/vs/editor/editor.api';
本地编辑 / 打包后,被处理的 monaco-editor/esm/vs/editor/editor.api.js 文件中会存在 monaco-sql-language 中 language 的导入。而在导入的 language 文件中,又导入了 monaco-sql-languages/esm/_.contribution.js ,存在循环引用的问题。导致 ReferenceError: Cannot access 'N' before initialization 的问题。
https://github.com/DTStack/monaco-sql-languages/issues/98 的解决办法是在这之前先引用一下 editor.api.js 这个文件
import 'monaco-editor/esm/vs/editor/editor.api';
虽然这样也会导致编译到 monaco-sql-languages/esm/_.contribution.js 文件中的 import { languages } from './fillers/monaco-editor-core'; 这一行时失败,失败是在 require配置的custom language处,上面的是正常加载(包括editor.api.js),加载的内容存在缓存中,在下次进入到 _.contribution.js 文件时,import { languages } from './fillers/monaco-editor-core'; 会直接从缓存中取。
请问有什么更好的解决办法吗?上面这个方法虽然可以解决现有的问题,但是在不知道这个问题的人看到这段代码时,会产生疑惑(比如我)。如果没有注释,可能顺手就删掉了。
- Lenguaje dominante
- TypeScript
- Estrellas
- 295
- Forks
- 50
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de DTStack/monaco-sql-languages
-
Build fails with monaco-editor >= 0.56: monaco-editor/esm/vs/editor/editor.api no longer resolvesAbierto
Dificultad 3/5 1-2 días Aptitud para principiantes 67/100
DTStack/monaco-sql-languages#231 · 1 comentario ·
-
[email protected] 存在 Revert Block 异常Quizá libre de nuevo @liuxy0551 la tomó hace 157 días y no hay ningún pull request abierto. Abierto
DTStack/monaco-sql-languages#215 · 1 asignado ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 30/100
DTStack/monaco-sql-languages#213 · 1 comentario ·
-
add support for clickhouseAbierto
Dificultad 3/5 1-2 días Aptitud para principiantes 38/100
DTStack/monaco-sql-languages#210 · 1 comentario ·
-
add support for mssqlAbierto
Dificultad 3/5 1-2 días Aptitud para principiantes 35/100
DTStack/monaco-sql-languages#209 ·
Todos los issues de DTStack/monaco-sql-languages
Issues similares
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 72/100
supadata-ai/mcp#27 ·
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
capricorn86/happy-dom#2485 ·
Los mantenedores suelen responder en 2 días
-
优化导入 OCR 模型选择文件的按钮样式Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 66/100
siyuan-note/siyuan#20430 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
Los mantenedores suelen responder en 2 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
Albert-Weasker/niubigeo#194 ·
Los mantenedores suelen responder en 1 día