我正在尝试将一个函数部署到Google Cloud Functions。我基于他们的ImageMagick教程。
每次,函数都会因为遇到错误而无法部署。查看日志,错误为:
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 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"
}
}
你能帮我弄清楚我做错了什么吗?
自从我被诱骗在项目目录中安装软件包以来,这种情况已经发生过很多次了。它在本地运行良好,但在尝试部署时会产生错误。
当我把目录改为functions
文件夹,而不是firebase项目文件夹,并在那里安装了一个软件包时,这对我来说很有效
cd functions
npm install [your missing package] --save
我遇到了这个问题。各种依赖关系导致我的功能部署失败。经过一番挖掘,我发现对等依赖关系没有被包括在内。
添加此修复了我的问题
"scripts": {
...
"gcp-build": "npm i npm-install-peers"
},
检查文档。CCD_ 10命令允许我们在功能构建过程中执行自定义构建步骤。
不知怎么的,我能够解决这个问题,但我不完全理解我的不同之处。当我运行npm install
时,我发现package.json
中列出的依赖项没有安装,所以我创建了一个单独的文件夹,并将代码复制到那里,在新文件夹中运行npm install
,从那里开始运行得很好。从那时起,当我更改依赖项并重新部署函数时,它们一直正常工作。
使用Node v12.13.1和带有webpack的无服务器部署到GCP和云功能,我一直在努力解决这个问题。在我的情况下,它是一个不同的模块。问题是node_modules中的没有模块可以要求或导入。如果看一下serverless目录中的webpack zip文件,原因就很清楚了;主";包中包含.json。
解决方案是调整webpack.config.js,以显式地包含那些丢失的文件。
webpack.config.js