aws + serverless + webpack =>在prod

时间:2017-03-20 17:49:52

标签: node.js amazon-web-services webpack serverless-framework serverless-architecture

我想使用无服务器 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.congfig.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和其他一切都没有)

2 个答案:

答案 0 :(得分:3)

我建议使用serverless-webpack plugin。在没有看到整个serverless.yml文件的情况下很难分辨,但我认为无服务器正在尝试部署functions:下列出的函数,在您的情况下,这些函数是用不理解的语法编写的通过AWS lambda上的Node.js 4.3运行时。

Serverless Stack详细介绍了如何使用serverless-webpack插件设置项目的详细信息:

  1. Setup the Serverless Framework
  2. Add Support for ES6 JavaScript

答案 1 :(得分:0)

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

这种方法的副作用是,当使用serverless-mocha-plugin自动创建测试时,不再考虑src/,必须在const mod = require('../src/user.js');中手动添加。{/ p>

可能存在其他副作用,缺乏证据不是缺席的证据!:)

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