aws + serverless + webpack =>在prod中找不到xxx模块
我想创build一个包,使用无服务器和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
一切正常,但是当testinglambda时,我得到一个错误:
{ "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和其他一切不是)
我会build议使用serverless-webpack插件 。 很难说没有看到整个serverless.yml
文件,但我会假设无服务器正在试图部署function下列出的functions:
,在你的情况下,这是写在一个不能被Node.js 4.3运行时在AWS上理解的语法拉姆达。
无服务器堆栈详细介绍了如何使用serverless-webpack
插件设置项目的详细步骤:
- 设置无服务器框架
- 添加对ES6 JavaScript的支持
一个可能的解决scheme是从serverless.yml
文件中的函数处理程序中删除src/
。
这种方法有一个副作用,那就是在使用serverless-mocha-plugin
自动创buildtesting时,不再考虑src/
,它必须在const mod = require('../src/user.js');
手动添加const mod = require('../src/user.js');
。
可能还有其他副作用, 缺乏证据不是缺席的证据! 🙂
所以, 我仍然在寻找一个没有副作用的解决scheme 。