在firebase init初始化的Node.js项目中无法将puppeteer安装至函数目录
问题根因
这个现象的核心诱因非常明确:
- 执行安装命令时,你当前终端的工作路径在Firebase项目的根目录,而非云函数专属的
functions子目录。firebase init生成的云函数项目,所有依赖配置(package.json)都存放在functions路径下,npm的安装逻辑只会根据当前执行命令的路径,查找就近的package.json来确定安装位置——如果在根目录执行命令,且根目录没有关联的云函数配置文件,npm会直接在当前路径生成独立的node_modules,完全不会主动关联子目录下的函数配置。 - 附带的低级失误:你输入的安装命令有拼写错误,puppeteer的正确包名是
puppeteer,而非你写的pupeteer,拼写错误时npm的安装逻辑会更不稳定,甚至可能在路径不对的情况下生成无意义的空依赖目录。
正确操作流程
- 先切换到云函数的工作目录,执行:
cd functions - 可执行
ls确认当前目录下存在package.json(正常初始化完成的functions目录一定包含该文件) - 执行拼写正确的安装命令:
npm install puppeteer - 安装完成后,对应函数目录下的
node_modules就会正常生成,也符合Firebase云函数的部署规则——云函数只会识别上传functions目录下的依赖,根目录生成的node_modules完全是无效的冗余文件,不会被上传到服务端。
补充注意点
之前在根目录执行安装产生的冗余文件,包括根目录下的
node_modules、自动生成的package.json、package-lock.json,建议全部手动删除,避免后续执行命令时出现路径混淆。
另外puppeteer默认安装会附带下载完整的Chromium浏览器,体积非常大,直接部署很容易触发Firebase云函数的部署包体积限制。建议安装时加参数跳过本地Chromium下载,改用Firebase云函数环境内置的Chromium可执行文件路径,减少部署包体积。
内容的提问来源于stack exchange,提问作者Prasath S
相关产品推荐
相关产品推荐

