HarmonyOS鸿蒙Next中小艺接入openclaw失败

HarmonyOS鸿蒙Next中小艺接入openclaw失败 执行openclaw plugins install @ynhcj/xiaoyi@latest时报错:

xiaoyi failed to load from /root/.openclaw/npm/node_modules/@ynhcj/xiaoyi/xiaoyi.js: ReferenceError: module is not defined in ES module scope

This file is being treated as an ES module because it has a ‘.js’ file extension and ‘/root/.openclaw/npm/node_modules/@ynhcj/xiaoyi/package.json’ contains “type”: “module”. To treat it as a CommonJS script, rename it to use the ‘.cjs’ file extension.


更多关于HarmonyOS鸿蒙Next中小艺接入openclaw失败的实战教程也可以访问 https://www.itying.com/category-93-b0.html

9 回复

您好,根据报错提示插件清单声明了xiaoyi,但没有包含channelConfigs元数据;请在openclaw.plugin.json添加channelConfigs

更多关于HarmonyOS鸿蒙Next中小艺接入openclaw失败的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


方案一:临时修复(推荐)

根据错误提示,最直接的解决方案是重命名文件:

# 1. 首先找到插件安装目录
cd /root/.openclaw/npm/node_modules/@ynhcj/xiaoyi

# 2. 重命名主文件
mv xiaoyi.js xiaoyi.cjs

# 3. 修改package.json中的入口文件
# 将 "main": "xiaoyi.js" 改为 "main": "xiaoyi.cjs"
sed -i 's/"main": "xiaoyi.js"/"main": "xiaoyi.cjs"/g' package.json

# 4. 重新加载OpenClaw
openclaw plugins reload

方案二:修改package.json配置

# 1. 进入插件目录
cd /root/.openclaw/npm/node_modules/@ynhcj/xiaoyi

# 2. 移除或修改type字段
# 方法A:完全移除type字段
sed -i '/"type": "module"/d' package.json

# 方法B:或改为CommonJS
sed -i 's/"type": "module"/"type": "commonjs"/g' package.json

# 3. 重启OpenClaw服务
openclaw restart

方案三:联系插件开发者

这个错误表明插件代码没有正确处理ES模块和CommonJS的兼容性。建议:

  1. 向插件开发者报告问题:在GitHub或相关社区提交issue
  2. 临时使用旧版本:如果可用,尝试安装较旧版本
    openclaw plugins install @ynhcj/xiaoyi@1.0.0  # 替换为可用版本
    

预防措施

  1. 检查Node.js版本:确保使用Node.js v22+(OpenClaw要求)
    node -v
    
  2. 安装前检查插件兼容性:查看插件文档是否支持ES模块
  3. 使用虚拟环境:在测试环境中先验证插件兼容性

让openclaw解决了一下这个问题后,频道里面可以显示小艺了,但并没有运行。

cke_1005.png

先用 openclaw plugins list 看看xiaoyi装成功了吗,看看是启用状态吗?

贴出来你的配置,~/.openclaw/openclaw.json,看看小艺的配置对吗。

是启用状态。

"plugins": {
    "entries": {
        "xiaoyi": {
            "enabled": true
        }
    }
},
"channels": {
    "xiaoyi": {
        "enabled": true,
        "ak": "***",
        "sk": "***",
        "agentId": "agentb910f6870e3c4f80a163001513a91955"
    }
}

重启看下
openclaw gateway restart

有问题,贴下log
openclaw logs --follow

根据报错提示及 Node.js 的模块规范,你有以下两种修复路径:

方案一:修改文件后缀(推荐,最快见效)
这是报错信息中直接建议的方法,也是最不容易破坏现有环境配置的方式。

  1. 找到报错的文件路径:/root/.openclaw/npm/node_modules/@ynhcj/xiaoyi/
  2. 将文件 xiaoyi.js 重命名为 xiaoyi.cjs
  3. 原理:.cjs 后缀会强制 Node.js 将该文件视为 CommonJS 模块,从而识别 module.exports,报错即可消失。

方案二:修改代码语法(如果你熟悉 ES6)
如果你希望保持 .js 后缀并适配现代 ES 模块标准,需要修改代码语法。

  1. 打开 xiaoyi.js 文件。
  2. module.exports = ... 替换为 export default ...
  3. 将文件内的 const xxx = require('...') 替换为 import xxx from '...'
  4. 注意:这种方法风险稍高,如果代码内部还有复杂的 CommonJS 逻辑,可能需要大量修改。

小艺接入openclaw失败,通常因以下原因:openclaw SDK未适配HarmonyOS NEXT的API(如ArkTS接口变更)、权限声明缺失(如ohos.permission.INTERNET及音频相关权限),或分布式组网未正确建立。请确认SDK版本及调用参数与NEXT规范一致。

该错误的原因是插件包 @ynhcj/xiaoyipackage.json 中声明了 "type": "module",导致 Node.js 将 .js 文件按 ES 模块解析,但 xiaoyi.js 内部使用了 CommonJS 的 module 对象,在 ES 模块作用域中该对象未定义。

解决方法(任选其一):

  1. /root/.openclaw/npm/node_modules/@ynhcj/xiaoyi/xiaoyi.js 重命名为 xiaoyi.cjs.cjs 扩展名会强制 Node.js 以 CommonJS 方式加载。
  2. 打开 /root/.openclaw/npm/node_modules/@ynhcj/xiaoyi/package.json,删除或注释掉 "type": "module" 字段,保存后重新执行安装。
    若不希望直接修改 node_modules,可将修复后的文件打包或联系插件作者适配。
回到顶部