uni-app 插件进程异常退出问题 某些操作引起了插件进程异常退出,可能会导致部分插件功能无法正常使用,建议重启 HBuilderX。

发布于 1周前 作者 yuanlaile 来自 Uni-App

uni-app 插件进程异常退出问题 某些操作引起了插件进程异常退出,可能会导致部分插件功能无法正常使用,建议重启 HBuilderX。

操作步骤

打开IDE就报错

预期结果

没有白屏,能启动项目,没有报错

实际结果

白屏卡死->报错->无法启动项目,启动就白屏

bug描述

打开Hbuildx后先白屏,然后报这个错误。
社区内两个相关问题的解决方案我尝试了没有效果。
首先是系统环境变量已经没有node相关变量,更换了版本没生效

log.txt

开发环境信息

项目创建方式 PC开发环境操作系统 PC开发环境操作系统版本号 HBuilderX类型 HBuilderX版本号 浏览器平台 浏览器版本
HBuilderX Windows 10 正式 3.4.15 Chrome 103

18 回复

从你上传的日志附件中,看到如下信息:
D:\下载文件\HBuilderX.3.4.15.20220610\HBuilderX\plugins\node\node.exe: --openssl-legacy-provider is not allowed in NODE_OPTIONS 原因:–openssl-legacy-provider,导致HBuilderX内置的Node启动报错。
两个解决方案:

从环境变量中,删除–openssl-legacy-provider
升级HBuilderX。HBuilderX 3.5.3 Node启动时, 已忽略–openssl-legacy-provider参数,可以使用此版本。


我使用的是3.5.3版本,但是每次启动都提示这个D:\下载文件\HBuilderX.3.4.15.20220610\HBuilderX\plugins\node\node.exe: --openssl-legacy-provider is not allowed in NODE_OPTIONS

然后等待大概十分钟之后就能正常启动项目

回复 h***@163.com: 都提示这个错误了。 不能从环境变量中把它删掉吗?等啥呢

回复 DCloud_HB_WDL: 我十分确定,我环境变量中没有这个,之前弄vue3的时候配置了一下这个环境变量,第一次报错就删了

回复 h***@163.com: 发下qq,我加你,了解下详细信息

有解决的吗

系统 win10 BuilderX版本号 3.6.4.20220922

日志中的错误: E:\hbuilder\HBuilderX\plugins\node\node.exe: --openssl-legacy-provider is not allowed in NODE_OPTIONS 。如果你的环境变量中配置了–openssl-legacy-provider, 清除掉试试

回复 DCloud_HB_WDL:删除了 还是同样的问题

node 已经切换 16.x 该删除的我也删除了 还是不行 还有其他解决办法吗

切换到 3.6.3.20220919-alpha 可以正常启动项目 建议官方早点修复

我的解决了,这个问题和HBuilderX没关系,应该也不是HBuilderX的bug,和HBuilderX版本也没关系,详细方法见
HbuilderX运行打包项目时报node.exe: --openssl-legacy-provider is not allowed in NODE_OPTIONS的解决办法

这个问题,我解决了 原因是Win64OpenSSL(可能你的安装版本不一样)的安装目录带有空格,卸载OpenSSL后,重新安装,确保路径不带空格,不带中文。安装好后,再启动HBuilder就可以了

系统 win7 BuilderX版本号 4.15

我的也是这样报错,两台电脑都是一样,请大神帮忙看下怎么回事。

帮忙看下附件日志,谢谢

针对您提到的uni-app插件进程异常退出的问题,这通常涉及到插件的运行环境、资源管理或代码逻辑错误。虽然重启HBuilderX有时可以解决临时问题,但深入了解并修复根本原因才是长久之计。以下是一些可能的解决方案和代码示例,用于排查和修复插件进程异常退出的问题。

1. 捕获异常并日志记录

首先,确保插件中的代码能够捕获并处理异常,同时记录详细的错误信息。这有助于定位问题发生的位置。

try {
    // 插件功能代码
} catch (error) {
    console.error('插件进程异常:', error);
    // 可将错误日志发送到服务器或写入本地文件
    uni.writeFile({
        filePath: `${uni.env.USER_DATA_PATH}/plugin_error.log`,
        data: JSON.stringify({
            timestamp: new Date().toISOString(),
            error: error.message,
            stack: error.stack
        }),
        success: () => {
            console.log('错误日志已记录');
        },
        fail: (err) => {
            console.error('记录错误日志失败:', err);
        }
    });
}

2. 检查资源占用

插件进程异常退出有时是因为资源占用过高(如内存泄漏)。检查并优化资源管理是关键。

// 定期清理不再使用的资源
setInterval(() => {
    // 示例:清理定时器
    for (let id in global.timers) {
        if (!global.timers[id].active) {
            clearTimeout(id);
            delete global.timers[id];
        }
    }
    // 其他资源清理逻辑...
}, 60000); // 每分钟检查一次

3. 插件通信稳定性

确保插件与主应用之间的通信稳定。使用uni-app提供的官方通信API,并处理可能的通信失败情况。

// 插件发送消息给主应用
try {
    uni.postMessage({ data: { message: 'Hello from plugin' } });
} catch (error) {
    console.error('插件发送消息失败:', error);
}

// 主应用监听插件消息
uni.onMessage((event) => {
    if (event.data && event.data.message) {
        console.log('收到插件消息:', event.data.message);
    } else {
        console.warn('收到无效插件消息:', event.data);
    }
});

结论

通过上述代码示例,您可以增强插件的异常处理能力、优化资源管理,并确保插件与主应用之间的通信稳定。这些措施有助于减少插件进程异常退出的风险。如果问题依旧存在,建议深入检查插件的具体实现逻辑,或联系插件开发者获取支持。

回到顶部