🔧 解决 Dify 1.9.2 代码编辑器快捷键失效问题(含完整修复步骤)

在使用 Dify 1.9.2(或基于它二次开发的版本)时,许多开发者会遇到一个很恼人的问题:

在工作流 · Code Cell(代码节点)中,Monaco 编辑器无法使用常规快捷键

  • 无法复制 / 粘贴
  • 无法输入 fh、空格等字符
  • 编辑器与页面存在事件冲突

官方已在 GitHub Issue 中确认这是一个 1.9.2 前端依赖导致的已知 bug

本文总结了官方修复方案,并给出了完整的实施步骤,适用于:

  • 使用官方源码部署的用户
  • 做了二次开发但不想整体升级版本的用户
  • 希望快速修复编辑器问题的团队

📌 问题来源分析

根据官方 Issue:
https://github.com/langgenius/dify/issues/27349

问题出在:

@monaco-editor/loader 的版本升级导致事件绑定、编辑器 model 初始化出现问题
→ 键盘事件被工作流画布截走,编辑器无法正确处理输入。

官方的修复 PR:
https://github.com/langgenius/dify/pull/27282/commits/eb11bbd1a092acf615cdbb0ab22e10329df701e0

修复内容包括两部分:

1. 降级依赖到稳定版本

"@monaco-editor/loader": "1.5.0"

2. 同步更新 Monaco Editor 静态资源

/web/public/vs 下的所有文件,包括:

  • loader.js
  • editor.worker.js
  • 各种语言定义文件
  • 其他 Monaco runtime 资源

这一步非常关键!

👉 如果只降级 loader 不更新静态资源,会导致 getModel undefined 等运行时错误,页面直接崩溃。


✅ 最佳解决方案:同步官方修复(推荐给所有二开团队)

以下方案适用于「基于 1.9.2 二次开发,不想整体升级」的情况。


🛠 完整修复步骤(可直接操作)

Step 0:创建一个新分支(保护现有代码)

git checkout -b fix/monaco-shortcut

Step 1:在 package.json 中增加 override

编辑:

web/package.json

在以下位置(pnpm.overrides)增加一行:

"pnpm": {
  "overrides": {
    "@monaco-editor/loader": "1.5.0"
  }
}

其他内容保持原样。


Step 2:从官方仓库获取修复后的 /public/vs

在本地开一个临时目录:

git clone https://github.com/langgenius/dify.git /tmp/dify-upstream
cd /tmp/dify-upstream
git checkout eb11bbd1a092acf615cdbb0ab22e10329df701e0

复制 Monaco 静态资源:

cd web/public
cp -r vs /你的项目/web/public/

如果你之前的项目已有 vs,建议先备份:

mv /你的项目/web/public/vs /你的项目/web/public/vs_backup

Step 3:更新依赖 & 重建前端

cd /你的项目/web
pnpm install --no-frozen-lockfile
pnpm build

--no-frozen-lockfile 很关键,它允许 lockfile 同步更新 override 的依赖。


Step 4:运行并测试

启动你的本地服务,进入工作流 · Code Cell:

☑ 输入是否正常?
☑ 是否能输入 f、h、空格?
☑ Ctrl/Cmd + C / V 是否恢复?
☑ console 中是否不再出现 “getModel undefined”?

若全部正常 → Bug 修复成功 🎉


Step 5:提交修改 & 合并上线

git add web/package.json web/pnpm-lock.yaml web/public/vs
git commit -m "fix: code cell shortcut issue by aligning monaco loader & assets"
git push origin fix/monaco-shortcut

合并到主分支,上线部署:

pnpm install --frozen-lockfile
pnpm build
docker restart ...

📈 总结:为什么必须同步静态资源?

很多开发者尝试过:

☑ 只修改 @monaco-editor/loader
☒ 但没同步 /public/vs

结果导致页面直接报:

Cannot read properties of undefined (reading 'getModel')

这是因为:

loader 1.5.0 对应的是 Monaco Editor 某个特定版本
而 Dify 1.9.2 自带的 vs 目录已经更高
→ 二者版本不一致导致 runtime model 初始化失败

所以必须把 loader 和 vs 保持一一对应。


🎉 修复完成!你的 Dify 代码编辑器回来了

通过以上步骤,无需整体升级 Dify,你就能:

  • 修复所有键盘事件失效问题
  • 保持你自己对 Dify 的二次开发不被破坏
  • 获得与官方一致的 Monaco Editor 版本组合
  • 避免未来页面崩溃 & undefined 错误

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐