Google Cloud Functions error: "Cannot find module 'sharp'" but it's in my package.json
Google Cloud Functions error: "Cannot find module 'sharp'" but it's in my package.json
我正在尝试将函数部署到 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
在我的 package.json
依赖项中是 。如果我在 Google 云控制台中打开该函数的 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"
}
}
你能帮我找出我做错了什么吗?
我以某种方式解决了这个问题,但我不完全理解我做了哪些不同的事情。我发现 package.json
中列出的依赖项在我 运行 npm install
时没有安装,所以我创建了一个单独的文件夹并将我的代码复制到那里,运行 npm install
在新文件夹中,从那里运行良好。从那时起,当我更改它们和 re-deploy 函数时,依赖项一直正常工作。
使用 Node v12.13.1 和通过 webpack 到 GCP 的无服务器部署和 cloud-functions,我一直在努力解决这个问题。就我而言,它是一个不同的模块。问题是来自 node_modules 的 no 模块可能需要或导入。如果看一下 .serverless 目录中的 webpack zip-file,原因就很清楚了。似乎 GCP 只包含 package.json 中表示为“main”的文件(通常为 index.js)。
解决方案是调整 webpack.config.js 以明确包含那些丢失的文件。
webpack.config.js
自从我被骗到项目目录下安装包后,这种情况在我身上发生过很多次。它在本地运行良好,但在您尝试部署时会产生错误。
当我将目录更改为 functions
文件夹而不是 firebase 项目文件夹并在其中安装包时,它对我有用
cd functions
npm install [your missing package] --save
我 运行 关注这个问题。各种依赖项导致我的函数部署失败。经过一番挖掘后,我发现 peer-dependencies 没有被包括在内。
添加这个解决了我的问题
"scripts": {
...
"gcp-build": "npm i npm-install-peers"
},
checking the docs。
gcp-build
命令允许我们在函数构建过程中执行自定义构建步骤。
我正在尝试将函数部署到 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
在我的 package.json
依赖项中是 。如果我在 Google 云控制台中打开该函数的 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"
}
}
你能帮我找出我做错了什么吗?
我以某种方式解决了这个问题,但我不完全理解我做了哪些不同的事情。我发现 package.json
中列出的依赖项在我 运行 npm install
时没有安装,所以我创建了一个单独的文件夹并将我的代码复制到那里,运行 npm install
在新文件夹中,从那里运行良好。从那时起,当我更改它们和 re-deploy 函数时,依赖项一直正常工作。
使用 Node v12.13.1 和通过 webpack 到 GCP 的无服务器部署和 cloud-functions,我一直在努力解决这个问题。就我而言,它是一个不同的模块。问题是来自 node_modules 的 no 模块可能需要或导入。如果看一下 .serverless 目录中的 webpack zip-file,原因就很清楚了。似乎 GCP 只包含 package.json 中表示为“main”的文件(通常为 index.js)。
解决方案是调整 webpack.config.js 以明确包含那些丢失的文件。
webpack.config.js
自从我被骗到项目目录下安装包后,这种情况在我身上发生过很多次。它在本地运行良好,但在您尝试部署时会产生错误。
当我将目录更改为 functions
文件夹而不是 firebase 项目文件夹并在其中安装包时,它对我有用
cd functions
npm install [your missing package] --save
我 运行 关注这个问题。各种依赖项导致我的函数部署失败。经过一番挖掘后,我发现 peer-dependencies 没有被包括在内。
添加这个解决了我的问题
"scripts": {
...
"gcp-build": "npm i npm-install-peers"
},
checking the docs。
gcp-build
命令允许我们在函数构建过程中执行自定义构建步骤。