localstack / localstack/serverless-localstack

Issue with working serverless-webpack

未关闭
#266 1 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

serverless-webpack status: backlog status: response required
主要语言
JavaScript
星标
542
派生
92
PR 合并指标
30 天内没有已合并 PR

描述

As the documentation says, I added this configuration inside my `custom` property in the serverless.yaml

```yaml
localstack:
stages:
# list of stages for which the plugin should be enabled
- local
- development
host: http://localhost # optional - LocalStack host to connect to
edgePort: 4566 # optional - LocalStack edge port to connect to
autostart: true # optional - Start LocalStack in Docker on Serverless deploy
networks: #optional - attaches the list of networks to the localstack docker container after startup
- host
- overlay
lambda:
# Enable this flag to improve performance
mountCode: true # specify either "true", or a relative path to the root Lambda mount path
```

The `webpack` config is this for the serverless:

```yaml
webpack:
webpackConfig: ./webpack.config.js
includeModules: true
excludeFiles: tests/**/*.{js,ts}
keepOutputDirectory: true
```

This is the webpack configuration:

```js
const path = require('path');
const slsw = require('serverless-webpack');
const nodeExternals = require('webpack-node-externals');

module.exports = {
entry: slsw.lib.entries,
target: 'node',
mode: slsw.lib.webpack.isLocal ? 'development' : 'production',
optimization: {
minimize: false,
},
plugins: [],
performance: {
// Turn off size warnings for entry points
hints: false,
},
externals: [nodeExternals()],
module: {
rules: [
{
test: /\.ts$/,
use: 'ts-loader?configFile=tsconfig.build.json',
exclude: [/node_modules/, /tests/],
},
],
},
resolve: {
extensions: ['.ts', '.js'],
},
output: {
libraryTarget: 'commonjs2',
path: path.join(__dirname, '.webpack'),
filename: '[name].js',
},
cache: {
type: 'filesystem',
},
};
```

And I'm getting this error:

```
Execution environment startup failed: {"errorType":"Runtime.ImportModuleError","errorMessage":"Error: Cannot find module 'a-handler'\nRequire stack:\n- /var/runtime/index.mjs","trace":["Runtime.ImportModuleError: Error: Cannot find module 'a-handler'","Require stack:","- /var/runtime/index.mjs"," at _loadUserApp (file:///var/runtime/index.mjs:1087:17)"," at async UserFunction.js.module.exports.load (file:///var/runtime/index.mjs:1119:21)"," at async start (file:///var/runtime/index.mjs:1282:23)"," at async file:///var/runtime/index.mjs:1288:1"]}
```

And it looks like is because the handler path is incorrect, it says this

` '_HANDLER': '.webpack/service/src/a-dir/a-handler.handle'`

But when webpack package the code is located in `.webpack/a-dir/a-handler.handle`, what would be the solution for that, I'm kind of lost, should I update the `output` path?

贡献指南

打开贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

调研方向

先从 serverless.yaml 中的 handler 配置和 webpack.config.js 开始,然后将生成的 .webpack 路径与错误中显示的 _HANDLER 值进行比较。检查 plugin 和 serverless-webpack 如何推导打包后 handler 的路径。当已部署的 handler 路径与生成的 .webpack/a-dir/a-handler.handle 位置一致,并且 LocalStack 调用成功启动时,即表示完成。

由索引模型根据 Issue 内容生成。

评估

技术栈
javascript, webpack
领域
cloud
Issue 类型
缺陷
难度
3/5
预计耗时
1-2 天
活跃度
停滞
描述清晰度
基本清楚
新手友好度
35/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。