最新的Qoder CN(0.5.7)在loongarch平台上无法运行

qoder-cn 1:0.5.7 (loongarch64) 启动即崩:主进程 ESM 链接失败,窗口不出现

摘要

  • 症状:安装后启动无窗口。主进程弹 A JavaScript error occurred in the main process,进程常驻(主进程/zygote/GPU/network 都在),但始终不创建 renderer,拿不到窗口。
  • 原因:产物对 node:zlib 使用静态具名导入 createZstdDecompress,而 loongarch64 包内置的 Electron 31.7.7 / Node v20.18.0 没有这个导出(zlib zstd 支持自 Node 22.15.0 才有)。ESM 在模块实例化阶段即抛 SyntaxError,主进程在 app.whenReady() 之前就退出。
  • 影响:全新配置目录也 100% 复现。同机 0.4.11 正常——同一段代码在 0.4.11 中是从默认导入解构,取不到只是 undefined,不会抛错。

环境

项值
发行版Loongnix GNU/Linux 25 (loongnix)
内核6.6.52-loong64
架构loong64
安装包qoder-cn 1:0.5.7 (loong64),Installed-Size 1097587
deb sha256b7ce0cafbacc6f4db3744bdc89220c3ce680526fdd7148f9997a47b8c548d56f
运行时/opt/Qoder CN/qoder-cn → ELF 64-bit LoongArch;Electron 31.7.7;Node v20.18.0
显示X11, DISPLAY=:0
对比版本qoder 1:0.4.11 (loong64),同运行时,可正常启动

复现步骤

sudo dpkg -i Qoder-CN-linux-loongarch64.deb
timeout 20 /opt/"Qoder CN"/qoder-cn --user-data-dir=$(mktemp -d) 2>&1 | grep -m1 -A2 SyntaxError

无需登录、无需旧配置,--user-data-dir 指向空目录同样复现。

实际结果

A JavaScript error occurred in the main process
Uncaught Exception:
file:///opt/Qoder%20CN/resources/app.asar/out/main/electronMain.js:1
import*as vHx from"electron";import{app as $x,...}from"./chunks/CObf1AlQ.js";...
SyntaxError: The requested module 'node:zlib' does not provide an export named 'createZstdDecompress'
    at ModuleJob._instantiate (node:internal/modules/esm/module_job:146:21)
    at async ModuleJob.run (node:internal/modules/esm/module_job:229:5)
    at async ModuleLoader.import (node:internal/modules/esm/loader:473:24)
    at async file:///opt/Qoder%20CN/resources/app.asar/out/main/index.js:1:7591

进程状态(错误对话框驻留,无 renderer):

$ ps -eo args | grep "Qoder CN/qoder-cn" | grep -c type=renderer
0

期望结果

正常创建窗口并进入登录页。

定位

打包产物 resources/app.asar 内 out/main/electronMain.js(bundle 为单行),偏移 47522250:

import nJ,{deflateRaw as n2x,createDeflateRaw as sYx,gunzipSync as oYx,
  createZstdDecompress as vYx,inflateRawSync as wYx,deflateRawSync as LYx}from"node:zlib";
  • 具名导入在 链接期 校验,导出不存在 → SyntaxError,与是否走到 zstd 分支无关。
  • 该文件中另一处偏移 51029990 是 const{...,createZstdDecompress:f}=nJ(从默认导入解构),加载期安全,只有真正解 zstd 响应时才会用到。

运行时验证:

$ ELECTRON_RUN_AS_NODE=1 /opt/"Qoder CN"/qoder-cn -e \
    'console.log(process.version, typeof require("node:zlib").createZstdDecompress)'
v20.18.0 undefined          # 包内运行时

$ node -v && node -e 'console.log(typeof require("zlib").createZstdDecompress)'
v22.16.0
function                    # Node 22.15.0 起提供

版本对比:

版本写法结果
0.4.11const{createZstdDecompress:a}=xE(默认导入解构)正常启动,zstd 不可用时仅该分支失效
0.5.7import {createZstdDecompress as vYx} from "node:zlib"链接期 SyntaxError,无法启动

建议修复

  1. 对齐运行时(首选):loongarch64 包内置 Electron/Node 升级到提供 zlib.createZstdDecompress 的版本(Node ≥ 22.15.0,即 Electron 33 之后较新的版本),并与其他架构的产物保持一致。
  2. 最小改动:把该处改回默认导入 + 运行时检测,例如
    import nJ from "node:zlib";
    const vYx = nJ.createZstdDecompress; // 不存在则不注册 zstd 解码器
    
    这样在缺失时只降级,不阻断启动(0.4.11 即此写法)。
  3. 构建期防回归:对 main bundle 里所有 node:* 具名导入做一次“目标 Electron 内置 Node 版本导出表”校验,避免以后再用到新 Node API。

用户侧临时绕过(已验证)

对上面 20 字节做等长替换 createZstdDecompress → createBrotliCompress(不影响 asar 头偏移),启动恢复正常,窗口标题 Qoder CN。仅当服务端返回 Content-Encoding: zstd 时该分支会失败,日常使用不触发。

附:次要问题(不阻断启动)

日志中出现 inotify_init() failed: 打开的文件过多 (24),本机 fs.inotify.max_user_instances=128 被占满。建议在文档中提示调高该值,或对 EMFILE 做降级处理,否则文件监看/工作区索引会静默失效。

展开
收起
游客thrbkvmar6kls 2026-11-13 16:52:21 26 分享 版权
1 条回答
写回答
取消 提交回答
  • Qoder CN 0.5.7 在 loongarch64 平台无法运行属预期情况。检索显示,截至2026年6月该版本仅支持x86架构,龙芯平台安装时直接提示无可用二进制包,ESM链接失败系缺失原生运行时所致。

    官方于2026年10月23日才正式宣布支持LoongArch64及统信UOS、银河麒麟系统。因此0.5.7不具备龙芯兼容能力,且无针对该版本的修复计划。

    建议从官网下载10月23日后发布的新版。若新版仍崩溃,可检查.lingma目录权限、网络代理及防火墙白名单.
    官方详细解决方案:https://www.aliyun.com/product/lingma

    2026-11-14 20:45:36
    赞同 3 展开评论
问答分类:
问答地址:

Qoder CN 是 Qoder CN 系列中面向软件开发场景的核心子产品(原“通义灵码”),提供 IDE、JetBrains 插件、Visual Studio Code 插件等多种使用形态。Qoder CN 持续提供代码智能生成、智能问答、多文件修改、编程智能体等能力,并在模型选择、专家协作、任务规划等方向全面升级,为开发者带来高效、流畅的编码体验。同时面向企业客户提供企业标准版、企业专属版,具备企业级场景自定义、私域知识增强等能力,助力企业研发智能化升级。

还有其他疑问?
咨询AI助理