为什么我得到这个错误“bcrypt_lib.node是不是一个有效的Win32应用程序,“当尝试运行bcrypt?

but5z9lq  于 2023-03-01  发布在  Node.js
关注(0)|答案(1)|浏览(300)

我正在用node和express构建一个填充堆栈应用程序,我安装了bcrypt,在尝试启动服务器后,我得到这个错误:

node:internal/modules/cjs/loader:1189
  return process.dlopen(module, path.toNamespacedPath(filename));
                 ^

Error: \\?\C:\Users\anjan\Desktop\web-projects\v_school\lvl6\rtv\backend\node_modules\bcrypt\lib\binding\napi-v3\bcrypt_lib.node is not a valid Win32 application.        
\\?\C:\Users\anjan\Desktop\web-projects\v_school\lvl6\rtv\backend\node_modules\bcrypt\lib\binding\napi-v3\bcrypt_lib.node
    at Object.Module._extensions..node (node:internal/modules/cjs/loader:1189:18)    
    at Module.load (node:internal/modules/cjs/loader:981:32)
    at Function.Module._load (node:internal/modules/cjs/loader:822:12)
    at Module.require (node:internal/modules/cjs/loader:1005:19)
    at require (node:internal/modules/cjs/helpers:102:18)
    at Object.<anonymous> (C:\Users\anjan\Desktop\web-projects\v_school\lvl6\rtv\backend\node_modules\bcrypt\bcrypt.js:6:16)
    at Module._compile (node:internal/modules/cjs/loader:1105:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1159:10)      
    at Module.load (node:internal/modules/cjs/loader:981:32)
    at Function.Module._load (node:internal/modules/cjs/loader:822:12) {
  code: 'ERR_DLOPEN_FAILED'
}

我试过了

  • 运行npm重建bcrypt--从源代码构建
  • npm安装node-pre-gyp-g,然后npm重建bcrypt--从源代码构建
  • 删除node_modules和程序包锁. json
  • 从node_modules中删除bcrypt并运行npm i

我看到Bcryptjs没有被修改,因为它已经很多年没有更新了。

iecba09b

iecba09b1#

您看到的错误消息表明bcrypt_lib. node文件存在问题,这可能与文件的体系结构有关。
此错误最常见的原因是试图在64位版本的Windows上加载32位版本的bcrypt库,反之亦然。库的体系结构必须与运行它的操作系统的体系结构匹配。
要修复此错误,您可以尝试下载适用于系统架构的bcrypt库的正确版本,或者尝试从源代码重新编译库以生成与系统架构匹配的版本。
您可能还需要检查您的系统是否安装了最新的更新和Service Pack,因为这有时会导致加载库时出现问题。
最好的解决办法是避免所有这些本地主机系统依赖性问题,而使用docker和docker-compose.运行一个linux镜像,保证你的代码可以永远工作。
便携性:Docker允许开发人员将他们的应用程序和依赖项打包到容器中,这些容器是可移植的,可以在任何支持Docker的平台上运行。这意味着开发人员可以轻松地将他们的应用程序从一个环境移动到另一个环境,而不必担心依赖项、配置或其他兼容性问题。
一致性:借助Docker,开发人员可以确保他们的应用程序在不同的环境(包括开发、测试、登台和生产)中一致地运行,这有助于降低因环境差异而导致的错误或其他问题的风险。
隔离:Docker容器在应用程序和它们的依赖项之间提供了一定程度的隔离,这意味着同一个应用程序或依赖项的不同版本可以共存于同一个系统中而不会发生冲突。
效率:Docker容器是轻量级的,可以快速旋转和拆卸,使测试、部署和扩展应用程序变得容易。这有助于提高开发人员的生产力,减少将新功能推向市场所需的时间。
协作:Docker使开发人员可以轻松地与其他人共享他们的应用程序,无论是在自己的组织内还是在更广泛的社区。通过共享容器,开发人员可以在项目上进行协作,共享最佳实践,并加快开发周期。
总的来说,Docker是一个令人惊叹的开发人员工具,因为它简化了构建、测试和部署应用程序的过程,同时还提高了可移植性、一致性、隔离性、效率和协作性。

相关问题