Skip to content

Support ES Modules #87

Description

@ffMathy

See https://aws.amazon.com/blogs/compute/using-node-js-es-modules-and-top-level-await-in-aws-lambda/

Here is my template file:

AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::Serverless-2016-10-31

Globals:
  Function:
    Runtime: nodejs18.x

Resources:
  Lambda:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: .
      Handler: app.handler
      Timeout: 10
      Architectures:
      - arm64
      Events:
        Api:
          Type: HttpApi
          Properties:
            Path: /events
            Method: POST

When running the plugin, the final template file generated is this:

AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::Serverless-2016-10-31
Globals:
  Function:
    Runtime: nodejs18.x
Resources:
  Lambda:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: Lambda
      Handler: app.mjs.handler
      Timeout: 10
      Architectures:
        - arm64
      Events:
        Api:
          Type: HttpApi
          Properties:
            Path: /events
            Method: POST

Note that app.mjs.handler is wrong. It should be just app.handler.

In my webpack.config.js, I have:

  • output.library.type set to "module".
  • output.library.chunkFormat set to "module".
  • experiments.outputModule set to true.

In my package.json, type is set to "module".

With this, .mjs files are generated instead of .js files. But because the file generated is called app.mjs.js instead of app.mjs, Lambda doesn't load it as an ES Module.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions