nodejs升级到4.0出错解决方案

本文详细记录了一次从 Node.js 旧版本升级至 4.0 版本时遇到的运行问题。升级过程中,发现使用的 C++ 库无法正常工作,返回 exitcode139 错误。经过排查,确认问题出在 canvas 库的调用上。通过在 Docker 部署环境下调整环境变量,成功解决了 canvas 库的安装问题,避免了错误的发生。

问题出现

已有网站项目,升级到node.js4.0,结果运行不起来,返回代码 exit code 139 。

摸索过程

通过搜索引擎,想查找139代表什么意思,未果。然后找升级注意事项的资料,发现了提到了C++模块使用着升级要小心,因此想到我的验证码使用了canvas。
通过屏蔽canvas的调用,确定了原因所在。

解决方法

知道了原因,其实就是要重新编译canvas库!
我服务器使用了docker部署,在linux下,canvas的安装在nodejs4.0下很正常。
在mac上安装却出现了问题,找不到cairo,仔细看了看我的安装记录(前面的 mac知识中有初装过程记录),发现可能是环境变量问题,运行

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/opt/X11/lib/pkgconfig

然后再安装canvas,成功。

结论

升级到nodejs4.0,你所使用的C++库可能需要重新编译。

PS C:\Users\Administrator> Set-ExecutionPolicy RemoteSigned -Scope LocalMachine -Force >> cd E:\ >> .\Setup-Environment.ps1 >> 涓嬭浇 Node.js 瀹夎绋嬪簭... 姝e湪瀹夎 Node.js... 涓嬭浇 .NET SDK 瀹夎绋嬪簭... 澶囩敤涓嬭浇婧? https://dotnet.microsoft.com/download/dotnet/thank-you/sdk-8.0.300-windows-x64-installer Invoke-WebRequest : 远程服务器返回错误: (400) 错误的请求。 所在位置 E:\Setup-Environment.ps1:42 字符: 5 + Invoke-WebRequest -Uri "https://download.visualstudio.microsoft.c ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest],WebExce ption + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand 姝e湪瀹夎 .NET SDK... Start-Process : 由于出现以下错误,无法运行此命令: 系统找不到指定的文件。。 所在位置 E:\Setup-Environment.ps1:46 字符: 1 + Start-Process $dotnetInstaller -Wait -ArgumentList "/install", "/quie ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [Start-Process],InvalidOperationException + FullyQualifiedErrorId : InvalidOperationException,Microsoft.PowerShell.Commands.StartProcessCommand 璁剧疆绯荤粺鐜鍙橀噺... node : 无法将“node”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确 ,然后再试一次。 所在位置 E:\Setup-Environment.ps1:57 字符: 32 + Write-Host "楠岃瘉 Node.js 瀹夎: $(node --version)" + ~~~~ + CategoryInfo : ObjectNotFound: (node:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException 楠岃瘉 Node.js 瀹夎: dotnet : 无法将“dotnet”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径 正确,然后再试一次。 所在位置 E:\Setup-Environment.ps1:58 字符: 33 + Write-Host "楠岃瘉 .NET SDK 瀹夎: $(dotnet --version)" + ~~~~~~ + CategoryInfo : ObjectNotFound: (dotnet:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException 楠岃瘉 .NET SDK 瀹夎: 鉁?鐜璁剧疆瀹屾垚 PS E:\> .\Install-EcosystemService.ps1 -Action Uninstall >> Start-Sleep -Seconds 2 >> .\Install-EcosystemService.ps1 -Action Install >> ✅ 服务停止成功 ✅ 服务删除成功 ✅ 服务创建成功 ✅ 服务权限设置成功 ❌ 服务启动失败: 由于以下错误无法启动服务“Project Ecosystem Manager (ProjectEcosystemManager)”: 无法启动计算机“.”上 的服务 ProjectEcosystemManager。 === 诊断信息 === 服务路径: "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -ExecutionPolicy Bypass -File "E:\ProjectEcosystem\ProjectMonitor\Scripts\ProjectEcosystemManager.ps1" 测试命令: "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -ExecutionPolicy Bypass -File "E:\ProjectEcosystem\ProjectMonitor\Scripts\ProjectEcosystemManager.ps1" 错误详情: ServiceName : ProjectEcosystemManager Message : 由于以下错误无法启动服务“Project Ecosystem Manager (ProjectEcosystemManager)”: 无法启动计算机“.”上 的服务 ProjectEcosystemMana ger。 Data : {} InnerException : System.InvalidOperationException: 无法启动计算机“.”上的服务 ProjectEcosystemManager。 ---> System.ComponentModel.W in32Exception: 服务没有及时响应启动或控制请求。 --- 内部异常堆栈跟踪的结尾 --- 在 System.ServiceProcess.ServiceController.Start(String[] args) 在 Microsoft.PowerShell.Commands.ServiceOperationBaseCommand.DoStartService(ServiceController servic eController) TargetSite : StackTrace : HelpLink : Source : HResult : -2146233087 PS E:\> # 直接运行主脚本测试 >> & "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -ExecutionPolicy Bypass -File "E:\ProjectEcosystem\ProjectMonitor\Scripts\ProjectEcosystemManager.ps1" >> 已启动脚本,输出文件为 E:\ProjectEcosystem\Logs\Service_20250813.log === 生态系统管理服务启动于 08/13/2025 22:04:59 === 当前用户: BF-202503252000\Administrator 工作目录: E:\ PATH环境变量: C:\Program Files\nodejs;C:\Program Files\dotnet;C:\Program Files\nodejs;C:\Program Files\dotnet;C:\Program Files\nodejs;C:\Program Files\dotnet;C:\Windows\System32;E:\curl-8.15.0_4-win64-mingw\bin;E:\Python310;E:\Python310\Scripts;C:\Windows;\Wbem;\WindowsPowerShell\v1.0\;C:\Program Files\Git\cmd;E:\ai_temp;C:\Program Files\NVIDIA Corporation\NVIDIA App\NvDLISR;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\ProgramData\Miniconda3\Scripts;C:\ProgramData\Miniconda3\Library\bin;C:\Program Files\Microsoft VS Code\bin;E:\Python310;E:\Python310\Scripts;E:\ai_temp;E:\Python310;E:\Python310\Scripts;E:\ai_temp;E:\Python310;E:\Python310\Scripts;E:\ai_temp ❌ 无法找到Node.js可执行文件 PS E:\> Start-Service -Name "ProjectEcosystemManager" >> Get-Service -Name "ProjectEcosystemManager" >> Get-Content "E:\ProjectEcosystem\Logs\Service_*.log" -Tail 50 -Wait >> Start-Service : 由于以下错误无法启动服务“Project Ecosystem Manager (ProjectEcosystemManager)”: 无法启动计算机“.”上 的服务 ProjectEcosystemManager。 所在位置 行:1 字符: 1 + Start-Service -Name "ProjectEcosystemManager" + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : OpenError: (System.ServiceProcess.ServiceController:ServiceController) [Start-Service], ServiceCommandException + FullyQualifiedErrorId : CouldNotStartService,Microsoft.PowerShell.Commands.StartServiceCommand Status Name DisplayName ------ ---- ----------- Stopped ProjectEcosyste... Project Ecosystem Manager === 生态系统管理服务启动于 08/13/2025 22:00:41 === 当前用户: BF-202503252000\Administrator 工作目录: E:\ PATH环境变量: C:\Program Files\nodejs;C:\Program Files\dotnet;C:\Program Files\nodejs;C:\Program Files\dotnet;C:\Windows\System32;E:\curl-8.15.0_4-win64-mingw\bin;E:\Python310;E:\Python310\Scripts;C:\Windows;\Wbem;\WindowsPowerShell\v1.0\;C:\Program Files\Git\cmd;E:\ai_temp;C:\Program Files\NVIDIA Corporation\NVIDIA App\NvDLISR;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\ProgramData\Miniconda3\Scripts;C:\ProgramData\Miniconda3\Library\bin;C:\Program Files\Microsoft VS Code\bin;E:\Python310;E:\Python310\Scripts;E:\ai_temp;E:\Python310;E:\Python310\Scripts;E:\ai_temp 🔍 监控项目: APIServer ⚠️ APIServer 未运行 🚀 正在启动 APIServer... ✅ APIServer 启动成功 🔍 监控项目: BackendService ⚠️ BackendService 未运行 🚀 正在启动 BackendService... ✅ BackendService 启动成功 ⏱️ 等待 60 秒后再次检查... 🔍 监控项目: APIServer ⚠️ APIServer 未运行 🚀 正在启动 APIServer... ✅ APIServer 启动成功 🔍 监控项目: BackendService ⚠️ BackendService 未运行 🚀 正在启动 BackendService... ✅ BackendService 启动成功 ⏱️ 等待 60 秒后再次检查... ********************** Windows PowerShell 脚本开始 开始时间: 20250813220459 用户名: BF-202503252000\Administrator RunAs 用户: BF-202503252000\Administrator 配置名称: 计算机: BF-202503252000 (Microsoft Windows NT 10.0.22631.0) 主机应用程序: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -ExecutionPolicy Bypass -File E:\ProjectEcosystem\ProjectMonitor\Scripts\ProjectEcosystemManager.ps1 进程 ID: 19236 PSVersion: 5.1.22621.2506 PSEdition: Desktop PSCompatibleVersions: 1.0, 2.0, 3.0, 4.0, 5.0, 5.1.22621.2506 BuildVersion: 10.0.22621.2506 CLRVersion: 4.0.30319.42000 WSManStackVersion: 3.0 PSRemotingProtocolVersion: 2.3 SerializationVersion: 1.1.0.1 ********************** 已启动脚本,输出文件为 E:\ProjectEcosystem\Logs\Service_20250813.log === 生态系统管理服务启动于 08/13/2025 22:04:59 === 当前用户: BF-202503252000\Administrator 工作目录: E:\ PATH环境变量: C:\Program Files\nodejs;C:\Program Files\dotnet;C:\Program Files\nodejs;C:\Program Files\dotnet;C:\Program Files\nodejs;C:\Program Files\dotnet;C:\Windows\System32;E:\curl-8.15.0_4-win64-mingw\bin;E:\Python310;E:\Python310\Scripts;C:\Windows;\Wbem;\WindowsPowerShell\v1.0\;C:\Program Files\Git\cmd;E:\ai_temp;C:\Program Files\NVIDIA Corporation\NVIDIA App\NvDLISR;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\ProgramData\Miniconda3\Scripts;C:\ProgramData\Miniconda3\Library\bin;C:\Program Files\Microsoft VS Code\bin;E:\Python310;E:\Python310\Scripts;E:\ai_temp;E:\Python310;E:\Python310\Scripts;E:\ai_temp;E:\Python310;E:\Python310\Scripts;E:\ai_temp ❌ 无法找到Node.js可执行文件 ********************** Windows PowerShell 脚本结束 结束时间: 20250813220459 **********************
08-14
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值