React Firebase项目部署云函数时提示找不到nodemailer模块
解决Firebase云函数部署时找不到nodemailer模块的问题
问题场景
在React+Firebase项目中创建使用nodemailer发送邮件的云函数,部署时提示找不到nodemailer模块。已执行npm install nodemailer --save,导入方式为import * as nodemailer from 'nodemailer';,但问题依旧。
错误信息
Function failed on loading user code. This is likely due to a bug in the user code. Error message: Provided module can't be loaded. Did you list all required modules in the package.json dependencies? Detailed stack trace: Error: Cannot find module 'nodemailer' Require stack: - /workspace/lib/index.js - /layers/google.nodejs.functions-framework/functions-framework/node_modules/@google-cloud/functions-framework/build/src/loader.js - /layers/google.nodejs.functions-framework/functions-framework/node_modules/@google-cloud/functions-framework/build/src/main.js at Module._resolveFilename (node:internal/modules/cjs/loader:1077:15) at Module._load (node:internal/modules/cjs/loader:922:27) at Module.require (node:internal/modules/cjs/loader:1143:19) at require (node:internal/modules/cjs/helpers:119:18) at Object.<anonymous> (/workspace/lib/index.js:6:20) at Module._compile (node:internal/modules/cjs/loader:1256:14) at Module._extensions..js (node:internal/modules/cjs/loader:1310:10) at Module.load (node:internal/modules/cjs/loader:1119:32) at Module._load (node:internal/modules/cjs/loader:960:12) at Module.require (node:internal/modules/cjs/loader:1143:19)
当前配置文件
package.json
{ "name": "functions", "scripts": { "build": "tsc", "build:watch": "tsc --watch", "serve": "npm run build && firebase emulators:start --only functions", "shell": "npm run build && firebase functions:shell", "start": "npm run shell", "deploy": "firebase deploy --only functions", "logs": "firebase functions:log" }, "engines": { "node": "18" }, "main": "lib/index.js", "dependencies": { "firebase-admin": "^11.8.0", "firebase-functions": "^4.3.1" }, "devDependencies": { "typescript": "^4.9.0", "firebase-functions-test": "^3.1.0" }, "private": true }
firebase.json中的functions配置
"functions": [ { "source": "functions", "codebase": "default", "ignore": [ "node_modules", ".git", "firebase-debug.log", "firebase-debug.*.log" ], "predeploy": [ "npm --prefix \"$RESOURCE_DIR\" run build" ] } ],
解决方案
- 确认依赖安装路径:必须在
functions子目录下执行npm install nodemailer --save,而非React项目根目录。误在根目录安装会导致云函数的package.json未更新依赖。 - 检查package.json依赖项:打开
functions/package.json,确认dependencies中存在"nodemailer": "^x.x.x"(x.x.x为对应版本号)。若未添加,手动写入后重新执行npm install。 - 清理重建依赖与代码:
- 删除
functions/node_modules文件夹和package-lock.json文件 - 在
functions目录下执行npm install重新安装所有依赖 - 执行
npm run build重新编译TypeScript代码 - 再次执行
firebase deploy --only functions
- 删除
- 优化部署前置步骤:修改firebase.json的predeploy配置,增加依赖安装步骤,确保部署前自动同步依赖:
"predeploy": [ "npm --prefix \"$RESOURCE_DIR\" install", "npm --prefix \"$RESOURCE_DIR\" run build" ] - 确认Node.js版本兼容:当前配置指定Node.js 18,nodemailer支持Node.js 16+,版本兼容。若之前用其他版本Node安装依赖,切换到Node.js 18后重新执行依赖安装。
内容的提问来源于stack exchange,提问作者Jerrdust
相关产品推荐
相关产品推荐

