aws + serverless + webpack => 在产品中找不到模块 xxx
aws + serverless + webpack => cannot find module xxx in prod
我想创建一个包以使用 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新手,能不能推荐一些代码和开发组织的"better practice"?(serverless和nodejs强加,webpack和其他一切都不是)
我建议使用 serverless-webpack plugin。没有看到整个 serverless.yml
文件很难说清楚,但我假设无服务器正在尝试部署 functions:
下列出的功能,在您的情况下,这些功能是用 [= 无法理解的语法编写的27=] AWS lambda 上的 4.3 运行时。
Serverless Stack 详细介绍了如何使用 serverless-webpack
插件设置项目:
该错误的一种可能解决方案是从 serverless.yml
文件中的函数处理程序中删除 src/
。
这种方法有副作用,当使用 serverless-mocha-plugin
自动创建测试时,不再考虑 src/
并且必须在 const mod = require('../src/user.js');
中手动添加它。
可能还有其他副作用,没有证据不是没有证据! :)
所以,我仍在寻找没有副作用的解决方案。
检查节点版本
node --version
Run
serverless plugin install --name serverless-webpack
我想创建一个包以使用 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新手,能不能推荐一些代码和开发组织的"better practice"?(serverless和nodejs强加,webpack和其他一切都不是)
我建议使用 serverless-webpack plugin。没有看到整个 serverless.yml
文件很难说清楚,但我假设无服务器正在尝试部署 functions:
下列出的功能,在您的情况下,这些功能是用 [= 无法理解的语法编写的27=] AWS lambda 上的 4.3 运行时。
Serverless Stack 详细介绍了如何使用 serverless-webpack
插件设置项目:
该错误的一种可能解决方案是从 serverless.yml
文件中的函数处理程序中删除 src/
。
这种方法有副作用,当使用 serverless-mocha-plugin
自动创建测试时,不再考虑 src/
并且必须在 const mod = require('../src/user.js');
中手动添加它。
可能还有其他副作用,没有证据不是没有证据! :)
所以,我仍在寻找没有副作用的解决方案。
检查节点版本
node --version
Run
serverless plugin install --name serverless-webpack