Whyisimportingbcryptcausinga"Cannotfindmodulenapi-v3/bcrypt_lib.node"error?

Using the Javascript bcrypt package, I get this server-side runtime import error only when deployed (on Vercel.com using Next.js /api routes which are AWS Lambdas under the hood):

41f80   ERROR   Error: Cannot find module '/var/task/node_modules/bcrypt/lib/binding/napi-v3/bcrypt_lib.node'
Require stack:
- /var/task/node_modules/bcrypt/bcrypt.js
- /var/task/.next/serverless/pages/api/login.js
- /var/task/___next_launcher.js
- /var/runtime/UserFunction.js
- /var/runtime/index.js
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
    at Function.Module._load (internal/modules/cjs/loader.js:725:27)
    at Module.require (internal/modules/cjs/loader.js:952:19)
    at require (internal/modules/cjs/helpers.js:88:18)
    at Object.<anonymous> (/var/task/node_modules/bcrypt/bcrypt.js:6:16)
    at Module._compile (internal/modules/cjs/loader.js:1063:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
    at Module.load (internal/modules/cjs/loader.js:928:32)
    at Function.Module._load (internal/modules/cjs/loader.js:769:14)
    at Module.require (internal/modules/cjs/loader.js:952:19) {
  code: 'MODULE_NOT_FOUND',
  requireStack: [
    '/var/task/node_modules/bcrypt/bcrypt.js',
    '/var/task/.next/serverless/pages/api/login.js',
    '/var/task/___next_launcher.js',
    '/var/runtime/UserFunction.js',
    '/var/runtime/index.js'
  ]
}

I definitely npm installed it:

"bcrypt": "^5.0.1",

它在本地有效,但在部署时无效。
我正在使用库服务器端。
我已经在互联网上搜索了几个小时试图找到这个问题的答案,但我找不到任何有这个确切问题的人。

本地节点版本:v14.16.0
托管节点版本:v14x

回答

在这里找到答案:https : //forum.serverless.com/t/after-making-a-deploy-i-test-the-function-and-show-this/8624/2

TLDR:不得不使用纯 Javascript 编写的 bcryptjs。显然,常规 bcrypt 库需要一些 C++ 依赖项,这些依赖项在某些环境(例如 AWS 的节点环境)中没有保证。


以上是Whyisimportingbcryptcausinga"Cannotfindmodulenapi-v3/bcrypt_lib.node"error?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>