引用 'monaco-editor/esm/vs/editor/editor.api' 导致出现循环引用问题
@Cythia828 đang làm issue này rồi.
Từ ngày 8/4/2025.
Đánh giá
Issue này chưa được đánh giá.
Mô tả
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'; 会直接从缓存中取。
请问有什么更好的解决办法吗?上面这个方法虽然可以解决现有的问题,但是在不知道这个问题的人看到这段代码时,会产生疑惑(比如我)。如果没有注释,可能顺手就删掉了。
- Ngôn ngữ chính
- TypeScript
- Star
- 295
- Fork
- 50
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Chuẩn bị môi trường
Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của DTStack/monaco-sql-languages
-
Build fails with monaco-editor >= 0.56: monaco-editor/esm/vs/editor/editor.api no longer resolvesĐang mở
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 67/100
DTStack/monaco-sql-languages#231 · 1 bình luận ·
-
[email protected] 存在 Revert Block 异常Có thể làm lại được @liuxy0551 đã nhận 156 ngày trước và không có pull request nào đang mở. Đang mở
DTStack/monaco-sql-languages#215 · 1 người được giao ·
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 30/100
DTStack/monaco-sql-languages#213 · 1 bình luận ·
-
add support for clickhouseĐang mở
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 38/100
DTStack/monaco-sql-languages#210 · 1 bình luận ·
-
add support for mssqlĐang mở
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 35/100
DTStack/monaco-sql-languages#209 ·
Tất cả issue của DTStack/monaco-sql-languages
Issue tương tự
-
clawsweeper:fix-shape-clear clawsweeper:queueable-fix clawsweeper:source-repro impact:other issue-rating: 🦞 diamond lobster no-stale P2
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
openclaw/openclaw#168089 · 2 bình luận · 1 reaction ·
Maintainer thường phản hồi trong vòng 1 ngày
-
✨ enhancement needs-discussion
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 85/100
-
[Bug]: [MCP/CLI] Bare loopback IP addresses (127.0.0.1:port) and hosts with ports fail to navigate due to erroneous scheme inferenceCó thể đã có người làm @alok-108 đã nhận hôm nay. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
microsoft/playwright#43263 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
area:studio type:security
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
Maintainer thường phản hồi trong vòng 1 ngày
-
enhancement good first issue Stellar Wave trivial
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 85/100
StellarCanary/ProtocolCanary-Action#331 ·
Maintainer thường phản hồi trong vòng 1 ngày