我正在尝试从源代码(镜像的git repo)部署GCP云功能。 Cloud Function部署似乎可以正确找到我的index.js(其中包含函数处理程序),但是由于出现了许多其他人发布的Code in file index.js can't be loaded. Cannot find module 'express'
错误而失败。我的package.json文件肯定包含express,但是:
{
...
"dependencies": {
"@google-cloud/speech": "^2.3.1",
"@google-cloud/storage": "^2.5.0",
"@sentry/node": "^5.4.3",
"cors": "^2.8.5",
"express": "4.17.1",
"googleapis": "45.0.0",
"moment": "^2.24.0",
"stripe": "^7.1.0"
},
...
}
我的package.json在项目根目录中,而暴露该函数本身的代码在/app/index.js
中。我在这里怎么可能做错了?
编辑: 我能够用一个非常简单的应用程序重现它。该应用程序仅包含4个文件:
app/index.js .gitignore package.json yarn.lock
// package.json
{
"name": "cloud-functions-test",
"version": "1.0.0",
"main": "app/index.js",
"repository": "git@github.com:roballsopp/cloud-functions-test.git",
"author": "rob <rca06d@my.fsu.edu>",
"license": "MIT",
"dependencies": {
"express": "^4.17.1"
}
}
// index.js
const express = require('express');
const app = express();
app.get('/health', function (req, res) {
res.status(200).send({ message: 'All good!' });
});
exports.testApp = app;
我将其推送到github,在GCP中设置了一个镜像存储库,并使用它部署了HTTP云功能。部署的所有设置均为默认设置,除了我将“存储库”设置为我的存储库名称(如云源存储库所示),“要执行的功能”设置为testApp
,将“包含源代码的目录”设置为{{1 }}。
答案 0 :(得分:0)
当我们从Git存储库中包含的数据部署Cloud Function时,我们将有机会使用源代码指定目录。可以相信,这会导致该目录(以及可能的下级目录)的部署。在这个故事中,我们拥有:
app
index.js
package.json
,我们将“带有源的目录”指定为/app
,然后实际部署的内容没有不包括package.json
。没有package.json
,就没有明确的依存关系,因此也就没有对express
的依存关系的认识。
另请参阅: