AWS + Serverless + Webpack => 生产环境中找不到模块 xxx

5
我希望创建一个使用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 和其他东西不是)

3个回答

5

通过阅读链接,事情变得更加清晰了。我通过在serverless.yml文件中删除处理程序的src/来解决了我的阻塞情况。 - Costin

3

检查Node.js版本

node --version

运行

serverless插件安装命令:serverless plugin install --name serverless-webpack


1
一种可能的解决方法是在serverless.yml文件中的函数处理程序中删除src/
这种方法的副作用是,当使用serverless-mocha-plugin自动创建测试时,不再考虑src/,必须手动添加const mod = require('../src/user.js');
可能会有其他副作用,“缺乏证据并不意味着不存在!”
因此,“我仍在寻找没有副作用的解决方案”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接