当我的package.json中存在GCP云函数“找不到模块'express'”时

时间:2019-12-04 20:24:02

标签: node.js google-cloud-functions

我正在尝试从源代码(镜像的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 }}。

1 个答案:

答案 0 :(得分:0)

当我们从Git存储库中包含的数据部署Cloud Function时,我们将有机会使用源代码指定目录。可以相信,这会导致该目录(以及可能的下级目录)的部署。在这个故事中,我们拥有:

app
  index.js
package.json

,我们将“带有源的目录”指定为/app,然后实际部署的内容没有包括package.json。没有package.json,就没有明确的依存关系,因此也就没有对express的依存关系的认识。

另请参阅: