aws + serverless + webpack => 在 prod 中找不到模块 xxx
Posted
技术标签:
【中文标题】aws + serverless + webpack => 在 prod 中找不到模块 xxx【英文标题】:aws + serverless + webpack => cannot find module xxx in prod 【发布时间】:2017-08-12 03:24:29 【问题描述】:我想创建一个包以使用 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.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 和其他一切都没有)
【问题讨论】:
【参考方案1】:我建议使用serverless-webpack plugin。如果没有看到整个 serverless.yml
文件,很难判断,但我认为无服务器正在尝试部署 functions:
下列出的函数,在您的情况下,这些函数是用 Node.js 4.3 运行时无法理解的语法编写的AWS lambda。
Serverless Stack 详细介绍了如何使用 serverless-webpack
插件设置项目:
-
Setup the Serverless Framework
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');
中手动添加。
可能还有其他副作用,没有证据不是没有证据! :)
所以,我仍在寻找没有副作用的解决方案。
【讨论】:
以上是关于aws + serverless + webpack => 在 prod 中找不到模块 xxx的主要内容,如果未能解决你的问题,请参考以下文章
aws + serverless + webpack => 在 prod 中找不到模块 xxx
带有可选字段的 serverless-aws-documentation 模型定义?
AWS + Serverless - 如何获取 cognito 用户池生成的密钥