【问题标题】:aws + serverless + webpack => cannot find module xxx in prodaws + serverless + webpack => 在 prod 中找不到模块 xxx
【发布时间】:2017-08-12 03:24:29
【问题描述】:

我想创建一个包以使用 serverlesswebpack 在 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)"
  ]
}

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

鉴于我是 serverless 的新手,您能建议我为代码和开发组织提供一些“更好的实践”吗?(强制使用 serverless 和 nodejs,webpack 和其他一切都没有)

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 通过阅读链接,事情变得更加清晰。我通过删除 serverless.yml 文件中的处理程序的 src/ 解决了我的阻塞情况。
    【解决方案2】:

    检查节点版本

    节点--版本

    运行

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

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2021-11-04
        • 1970-01-01
        • 2020-06-19
        • 1970-01-01
        • 2020-12-12
        • 2021-10-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多