Google Cloud Functions 错误:“找不到模块‘sharp’”,但它在我的 package.json 中

问题描述 投票:0回答:5

我正在尝试将函数部署到 Google Cloud Functions。我基于他们的 ImageMagick tutorial

每次,该函数都会因为出现错误而无法部署。查看日志,错误为:

    Provided module can't be loaded. 
    Did you list all required modules in the package.json dependencies? 
    Detailed stack trace: 
    Error: Cannot find module 'sharp' 

我不明白为什么会发生这种情况,因为

sharp
is 在我的
package.json
依赖项中。如果我在 Google Cloud 控制台中打开该函数的 Web 编辑器,则
package.json
作为文件之一存在,并将
sharp
显示为依赖项。我尝试运行
npm install
npm install --save
并重新部署,但这并没有解决任何问题。

我将包包含在带有

const sharp = require('sharp');
的函数中(这是日志显示发生错误的行),这是我的
package.json
:

{
  "name": "Resize images",
  "version": "0.0.1",
  "private": true,
  "author": "James Tyner",
  "engines": {
    "node": ">=10.0.0"
  },
  "dependencies": {
    "@google-cloud/storage": "^5.0.0",
    "sharp": "^0.25.4"
  }
}

你能帮我找出我做错了什么吗?

node.js npm google-cloud-functions sharp
5个回答
7
投票

自从我被骗在项目目录中安装软件包以来,这种情况已经在我身上发生过很多次了。它在本地工作正常,但在您尝试部署时会产生错误。

当我将目录更改为

functions
文件夹(而不是 firebase 项目文件夹)并在其中安装包时,它对我有用

cd functions
npm install [your missing package] --save

2
投票

我遇到了这个问题。各种依赖项导致我的功能部署失败。经过一番挖掘后,我发现对等依赖关系没有被包含在内。

添加此解决了我的问题

"scripts": {
   ...
  "gcp-build": "npm i npm-install-peers"
},

检查文档

gcp-build
命令允许我们在函数构建过程中执行自定义构建步骤。


1
投票

不知何故,我能够解决这个问题,但我不完全理解我做了什么不同的事情。我发现当我运行

package.json
时,
npm install
中列出的依赖项并未安装,因此我创建了一个单独的文件夹并将代码复制到那里,在新文件夹中运行
npm install
,并且从那里运行良好。从那时起,当我更改依赖项并重新部署该功能时,依赖项一直正常工作。


1
投票

使用 Node v12.13.1 和无服务器部署以及 webpack 到 GCP 和云功能,我一直在努力解决这个问题。就我而言,它是一个不同的模块。问题是,node_modules 中的no模块可以被要求或导入。如果查看一下 .serverless 目录中的 webpack zip 文件,原因就会很清楚。看起来 GCP 除了 package.json 中表示为“main”的文件(通常是 index.js)之外什么都没有包含在内。

解决方案是调整 webpack.config.js 以显式包含那些丢失的文件。

webpack.config.js


0
投票

对于仍然遇到此问题的任何人,我发现当我有一个在依赖项和 devDependency 中列出的包时,它失败了,并且在运行后遇到以下错误

gcloud functions logs read myFunction

Cannot find module '@google-cloud/functions-framework'

要解决此问题,只需从

devDependencies
中删除该包并确保它仅位于
dependencies
文件中的
package.json
中。

© www.soinside.com 2019 - 2024. All rights reserved.