为什么导入 bcrypt 会导致 "Cannot find module napi-v3/bcrypt_lib.node" 错误?
Why is importing bcrypt causing a "Cannot find module napi-v3/bcrypt_lib.node" error?
使用 Javascript bcrypt 包,我仅在部署时收到此服务器端运行时导入错误(在 Vercel.com 使用 Next.js /api 路由,这是 AWS幕后的 Lambdas):
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'
]
}
我肯定 npm 安装了它:
"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 库需要一些在某些环境(例如 AWS 的节点环境)中无法保证的 C++ 依赖项。
使用 Javascript bcrypt 包,我仅在部署时收到此服务器端运行时导入错误(在 Vercel.com 使用 Next.js /api 路由,这是 AWS幕后的 Lambdas):
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'
]
}
我肯定 npm 安装了它:
"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 库需要一些在某些环境(例如 AWS 的节点环境)中无法保证的 C++ 依赖项。