使用vercel/ncc打包后运行报Cannot find module 'bcrypto.node'错误如何解决
修复ncc打包后缺失
bcrypto.node模块的方案 问题根源
bcrypto属于包含原生C++编译产物的Node.js依赖包,bcrypto.node就是其预编译的二进制组件。vercel/ncc默认仅会打包项目中的JS/TS类代码,不会自动识别并打包这类原生二进制模块,导致运行时找不到对应文件。
可行修复方法
方法1:使用ncc的外部依赖排除参数
打包时添加--external bcrypto参数,告诉ncc不要打包bcrypto模块,运行时会自动加载项目node_modules中的对应依赖。打包命令示例:ncc build index.js --external bcrypto注意:这种方案要求运行环境的同级目录下有包含bcrypto的node_modules文件夹
方法2:手动复制
bcrypto.node到打包产物目录
打包完成后,找到项目node_modules/bcrypto/build/Release/路径下的bcrypto.node文件,直接复制到ncc生成的打包产物所在的同级目录即可,运行时会自动检索同级目录下的原生模块。方法3:替换无原生依赖的替代包
如果不需要强依赖bcrypto的特定功能,可以换成纯JS实现的同类加密库,比如crypto-js,修改业务代码中的引用后重新打包即可,不会再出现原生模块缺失问题。方法4:配置ncc的assets规则打包原生模块
打包时添加--asset '*.node'参数,让ncc自动识别并把所有.node后缀的原生模块作为静态资源打包到产物目录:ncc build index.js --asset '*.node'
内容的提问来源于stack exchange,提问作者Finlay Weber
相关产品推荐
相关产品推荐

