无服务器框架部署不安装节点依赖

问题描述

我有一个非常简单的节点应用程序,它是从无服务器示例中获得的:https://github.com/serverless/examples/tree/master/aws-node-express-api。我部署了:

serverless deploy

serverless.yml 是:

service: aws-node-express-api

frameworkVersion: '2'


provider:
  name: aws
  runtime: nodejs12.x
  lambdaHashingVersion: '20201221'

functions:
  api:
    handler: handler.handler
    events:
      - http:
          path: /
          method: ANY
      - http:
          path: /{proxy+}
          method: ANY

handler.js 是:

const serverless = require("serverless-http");
const express = require("express");
const app = express();

app.get("/",(req,res,next) => {
  return res.status(200).json({
    message: "Hello from root!",});
});

app.get("/hello",next) => {
  return res.status(200).json({
    message: "Hello from path!",});
});

app.use((req,next) => {
  return res.status(404).json({
    error: "Not Found",});
});

module.exports.handler = serverless(app);

package.json 是:

{
  "name": "aws-node-express-api","version": "1.0.0","description": "","dependencies": {
    "express": "^4.17.1","serverless-http": "^2.7.0"
  }
}

当我运行 CURL 时,我得到:

{"message": "Internal server error"}

当我查看日志时,我看到:

{
    "errorType": "Runtime.ImportModuleError","errorMessage": "Error: Cannot find module 'serverless-http'\nRequire stack:\n- /var/task/handler.js\n- /var/runtime/UserFunction.js\n- /var/runtime/index.js","stack": [
        "Runtime.ImportModuleError: Error: Cannot find module 'serverless-http'","Require stack:","- /var/task/handler.js","- /var/runtime/UserFunction.js","- /var/runtime/index.js","    at _loadUserApp (/var/runtime/UserFunction.js:100:13)","    at Object.module.exports.load (/var/runtime/UserFunction.js:140:17)","    at Object.<anonymous> (/var/runtime/index.js:43:30)","    at Module._compile (internal/modules/cjs/loader.js:999:30)","    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)","    at Module.load (internal/modules/cjs/loader.js:863:32)","    at Function.Module._load (internal/modules/cjs/loader.js:708:14)","    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:60:12)","    at internal/main/run_main_module.js:17:47"
    ]
}

我去了 AWS 上的 Lambda 函数,我看到:

enter image description here

所以你可以看到没有 node_modules 文件夹。我不想推送 node_modules 文件夹,我希望这些依赖项能够自动安装(我很确定这发生在我上次创建无服务器节点功能之前)。但它没有被安装。如何确保安装依赖项?

解决方法

npm install 不会与无服务器框架一起自动运行。

AWS 提供了一个最小的节点环境,但唯一的 aws-sdk 是 included

您需要在部署前运行 npm install