You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用nx-serverless模板导入node_modules依赖时webpack报Module not found错误

问题根因

报错是因为bcrypt属于带原生编译逻辑的依赖,它依赖的@mapbox/node-pre-gyp包中存在仅用于测试场景的可选依赖nock,默认不会在生产环境安装。而你当前的webpack配置未外置node_modules依赖,构建时会尝试解析所有导入的模块,找不到对应可选依赖就抛出了构建错误。

解决方案

方案1(优先推荐,无额外兼容问题)

直接替换bcrypt为纯JS实现的等价包bcryptjs,API完全兼容,无需修改业务逻辑,也不会出现原生依赖打包问题:

  • 安装依赖:
npm i bcryptjs && npm i -D @types/bcryptjs
  • 修改导入语句即可:
import { hash } from 'bcryptjs';

方案2(必须使用原生bcrypt时使用)

修改webpack配置和serverless打包规则:

  1. 修改webpack配置的externals字段,外置所有node_modules依赖,不需要把依赖打包进产物,运行时直接加载:
// 把原配置里的 externals: [] 替换为以下内容
externals: [
  slsw.lib.entries,
  // 匹配所有非相对路径的导入,即node_modules下的依赖
  /^[^./]|^\.[^./]|^\.\.[^/]/,
  // 单独显式外置原生相关依赖
  'bcrypt',
  '@mapbox/node-pre-gyp'
],
  1. 添加IgnorePlugin过滤node-pre-gyp中的测试依赖,不需要解析未安装的可选依赖:
plugins: [
  new webpack.IgnorePlugin({
    resourceRegExp: /nock|aws-sdk-mock/,
    contextRegExp: /@mapbox\/node-pre-gyp/
  })
],
  1. 修改serverless.yml配置,打包时保留bcrypt相关依赖:
package:
  patterns:
    - 'node_modules/bcrypt/**'
    - 'node_modules/@mapbox/node-pre-gyp/**'

注意:如果部署到云厂商的Serverless运行环境,需要保证安装依赖时的系统架构与运行环境一致,比如AWS Lambda默认用x86_64架构的话,需要在对应架构的环境下安装依赖,避免原生二进制文件不兼容。

内容的提问来源于stack exchange,提问作者tamim abweini

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 21:36:03