4

我想使用 serverless 和 webpack 创建一个要在 AWS 上部署

serverless.yml我想声明所有资源(主要是 DynamoDb 表)和函数。我想使用外部node.js库。

文件夹结构为:

|- serverless.yml
|- webpack.config.js
|- package.json
|- src 
  \ - file1.js
  | - file2.js

从 serverless.yml 中提取

functions:
  function1:
    handler: src/file1.f1
  function2:
    handler: src/file2.f2

从 webpack.configfig.js 中提取

module.exports = {
  entry: {
    file1: './src/file1.js',
    file2: './src/file2.js',
  },
  target: 'node',
  output: {
    libraryTarget: 'commonjs',
    path: path.join(__dirname, '.webpack'),
    filename: '[name].js',
  },
  module: {
    loaders: [
      {
        test: /\.json$/,
        loaders: ['json-loader'],
      },
    ],
  },
};

serverless deploy一切正常时,但在测试 lambda 时出现错误:

{
  "errorMessage": "Cannot find module '/var/task/src/file1'",
  "errorType": "Error",
  "stackTrace": [
    "Function.Module._load (module.js:276:25)",
    "Module.require (module.js:353:17)",
    "require (internal/module.js:12:17)"
  ]
}

你能告诉我我做错了什么吗?

鉴于我是无服务器的新手,您能否建议我为代码和开发组织提供一些“更好的实践”?(无服务器和 nodejs 被强加,webpack 和其他一切都不是)

4

3 回答 3

5

我建议使用serverless-webpack 插件。没有看到整个文件就很难判断serverless.yml,但我假设 serverless 正在尝试部署下面列出的函数functions:,在您的情况下,这些函数是用 AWS lambda 上的 Node.js 4.3 运行时不理解的语法编写的。

Serverless Stackserverless-webpack详细介绍了如何使用该插件设置项目:

  1. 设置无服务器框架
  2. 添加对 ES6 JavaScript 的支持
于 2017-03-20T21:31:18.563 回答
3

检查节点版本

节点--版本

无服务器插件安装 --name serverless-webpack

于 2019-03-12T19:12:34.310 回答
1

该错误的一种可能解决方案是src/从文件中函数的处理程序中删除serverless.yml

这种方法的副作用是,不再考虑使用 自动创建测试时serverless-mocha-pluginsrc/必须在const mod = require('../src/user.js');.

可能还有其他副作用,没有证据不等于没有证据!:)

所以,我仍在寻找没有副作用的解决方案

于 2017-03-21T10:35:30.073 回答