执行npm install --save @sendgrid/mail成功后,node_modules及package.json无依赖怎么办?
这种情况我之前帮不少开发者排查过,大概率是npm的工作目录不对或者缓存/配置出了小问题,咱们一步步来解决:
先确认你在正确的目录执行命令
Firebase Cloud Functions的依赖必须安装在项目的functions子目录下,很多人容易不小心在项目根目录跑npm install,这时候依赖会装到根目录的node_modules里,而不是functions文件夹里。先切换到functions目录:cd functions然后再重新执行安装命令:
npm install --save @sendgrid/mail查看详细安装日志排查隐藏错误
有时候终端提示“成功”但实际有隐性报错,比如网络超时、权限不足导致包没下载完整。重新执行安装命令并加上--verbose参数,查看完整日志:npm install --save @sendgrid/mail --verbose日志里如果出现
ERR!开头的信息,就针对性解决(比如权限问题可以加sudo,网络问题切换镜像源)。清理npm缓存后重试
npm缓存损坏也可能导致依赖不生效,先强制清理缓存:npm cache clean --force清理完成后再重新执行安装命令。
手动修改package.json再安装
如果上面的步骤都没用,直接打开functions/package.json文件,在dependencies字段里手动添加:"@sendgrid/mail": "^7.7.0"(版本号可以换成当前最新的稳定版),然后执行
npm install让npm自动同步依赖。升级npm到最新版本
旧版本的npm可能存在兼容性问题,先升级全局npm:npm install -g npm@latest升级完成后再回到functions目录重新安装依赖。
检查Firebase Functions环境同步
如果是本地开发环境,可以试试重启Firebase模拟器;如果是部署到云端,执行firebase deploy --only functions,部署过程中Firebase会自动安装functions目录下的依赖,这时候也能验证依赖是否正确配置。
内容的提问来源于stack exchange,提问作者Sriram R

