Skip to content

publish Node.js module compatible ESM (.mjs) artifacts #3622

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
JamesKyburz opened this issue May 19, 2022 · 35 comments
Open

publish Node.js module compatible ESM (.mjs) artifacts #3622

JamesKyburz opened this issue May 19, 2022 · 35 comments
Assignees
Labels
feature-request New feature or enhancement. May require GitHub community feedback. needs-discussion p2 This is a standard priority issue queued This issues is on the AWS team's backlog xl Effort estimation: very large

Comments

@JamesKyburz
Copy link

JamesKyburz commented May 19, 2022

Describe the bug

The dist-es code published to NPM is never run when no bundler is used.

Your environment

SDK version number

@aws-sdk/<all I think>@3.94.0

Is the issue in the browser/Node.js/ReactNative?

No

Details of the browser/Node.js/ReactNative version

Paste output of npx envinfo --browsers or node -v or react-native -v

LTS version of node Now using node v16.15.0 (npm v8.5.5)

Steps to reproduce

cd /tmp
mkdir -p aws-sdk-test
cd aws-sdk-test
echo '{"type": "module"}' > package.json
npm i @aws-sdk/client-dynamodb
echo -e '\n\nconsole.log("ESM!")' >> node_modules/@aws-sdk/client-dynamodb/dist-es/index.js
echo -e '\n\nconsole.log("CJS!")' >> node_modules/@aws-sdk/client-dynamodb/dist-cjs/index.js
echo "import { DynamoDBClient } from '@aws-sdk/client-dynamodb'" > index.js
node index.js # CJS!

Observed behavior

The code shipped in dist-es doesn't work in Node either because it's non standard (for example file extensions are missing).

Adding the exports field to package.json + index.mjs would work if the dist-es code was compatible with node.

  "exports": {
    "import": "./dist-es/index.mjs",
    "require": "./dist-cjs/index.js"
  }

Expected behavior

Using this module with vanilla node runs the ESM code.

Screenshots

If applicable, add screenshots to help explain your problem.

Additional context

Add any other context about the problem here.

@JamesKyburz JamesKyburz added bug This issue is a bug. needs-triage This issue or PR still needs to be triaged. labels May 19, 2022
@ajredniwja ajredniwja self-assigned this May 23, 2022
@ajredniwja ajredniwja added the investigating Issue is being investigated and/or work is in progress to resolve the issue. label May 23, 2022
@ajredniwja
Copy link
Contributor

HI @JamesKyburz thanks for bringing this up, one of the many solutions is indeed to rename the files, the team is already aware of this and working on a solution. Will keep you posted.

@ajredniwja ajredniwja added needs-review This issue/pr needs review from an internal developer. and removed investigating Issue is being investigated and/or work is in progress to resolve the issue. needs-triage This issue or PR still needs to be triaged. labels May 27, 2022
@JamesKyburz
Copy link
Author

@ajredniwja Thanks, I have quite a long exclude list when deploying lambdas the keep the size down :)

Some of them are

- '!./**/node_modules/typescript'
- '!./**/node_modules/@types'
- '!./**/node_modules/@aws-sdk/**/dist-es'
- '!./**/node_modules/@aws-sdk/**/dist-types'
- '!./**/CHANGELOG.md'
- '!./**/LICENSE*'
- '!./**/README.md'

@thdxr
Copy link

thdxr commented Jun 1, 2022

Even without the file name extensions the use of the "module" field I believe is non-standard and not respected by anything I'm using

The exports field should be added

@ajredniwja ajredniwja added the p2 This is a standard priority issue label Jun 10, 2022
@ajredniwja ajredniwja removed their assignment Jun 10, 2022
@thdxr
Copy link

thdxr commented Jul 6, 2022

Can we get an update on this? The follow very basic example fails despite aws docs mentioning ESM in several places

import { S3Client, ListBucketsCommand } from "@aws-sdk/client-s3";

const client = new S3Client({});
const result = await client.send(new ListBucketsCommand());
console.log(result);

@rcoundon
Copy link

I'm also interested in when this can be rectified

@thdxr
Copy link

thdxr commented Jul 16, 2022

@ajredniwja can we get some kind of update?

@aisflat439
Copy link

bump

@blytheaw
Copy link

It would be helpful for us as well to get an update/resolution on this soon; thanks!

@steviec
Copy link

steviec commented Jul 26, 2022

Ditto, a response would be really appreciated. Thank you!

@kdallen1
Copy link

same

@revmischa
Copy link

The community is eager for a fix

@adsc
Copy link

adsc commented Jul 26, 2022

Can the community do something to help fix this? What are the next steps?

@kevinggrimm
Copy link

Also interested, thanks!

@lkow
Copy link

lkow commented Jul 27, 2022

I'm also interested in getting an eta for this one!

@acamaral
Copy link

Please, I need this fix too.

@ppold
Copy link

ppold commented Jul 28, 2022

+1 hope this gets fixed asap

@JamesKyburz
Copy link
Author

A good start would be making sure all relative imports use file extensions .js, which is required by vanilla esm, and works in typescript too.

@rromanchuk
Copy link

Please build and host your esm dist. I can recommend a CDN service called CloudFront.

Then dog food it, no build tools especially with flagship clients, CognitoProvider and even Amplify.configure(), no reason node should ever be required to run any getting started guide. Check out the other guys for inspiration.

<javascript type="module">
  import { initializeApp } from "https://www.gstatic.com/firebasejs/9.9.3/firebase-app.js";
  const firebaseConfig = {}
  const app = initializeApp(firebaseConfig);
</javascript>

@rromanchuk
Copy link

Oh wow they are actually resolving now, at least the ones i just tried, haven't tried again with node build tools.

<!doctype html>
<html>
<head>
  <meta charset="utf-8">
  <title>Untitled</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
  <!--
    JSPM Generator Import Map
    Edit URL: https://generator.jspm.io/#U2VhYGDhD80rySzJSU1hcEgsL9YtTsnWT87JTM0r0U3OT8/LLMnXzUxJBSmp1C0oyi8DcoocjPUMLQz0DDB0ZGfmpRZnFuuCVOXrFmem5yXmZOalE6cep6piY5gUAOgTvPexAA
  -->
  <script type="importmap">
  {
    "imports": {
      "@aws-sdk/client-cognito-identity-provider": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
      "@aws-sdk/client-kinesis-video": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
      "@aws-sdk/client-kinesis-video-signaling": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
      "@aws-sdk/client-s3": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js"
    },
    "scopes": {
      "https://ga.jspm.io/": {
        "@aws-crypto/crc32": "https://ga.jspm.io/npm:@aws-crypto/[email protected]/build/index.js",
        "@aws-crypto/crc32c": "https://ga.jspm.io/npm:@aws-crypto/[email protected]/build/index.js",
        "@aws-crypto/util": "https://ga.jspm.io/npm:@aws-crypto/[email protected]/build/index.js",
        "@aws-sdk/client-sso": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/client-sts": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/config-resolver": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/credential-provider-env": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/credential-provider-imds": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/credential-provider-ini": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/credential-provider-node": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/credential-provider-process": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/credential-provider-sso": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/credential-provider-web-identity": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/eventstream-codec": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/eventstream-serde-config-resolver": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/eventstream-serde-node": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/eventstream-serde-universal": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/hash-node": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/hash-stream-node": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/is-array-buffer": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/middleware-bucket-endpoint": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/middleware-content-length": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/middleware-expect-continue": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/middleware-flexible-checksums": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/middleware-host-header": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/middleware-location-constraint": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/middleware-logger": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/middleware-recursion-detection": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/middleware-retry": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/middleware-sdk-s3": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/middleware-sdk-sts": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/middleware-serde": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/middleware-signing": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/middleware-ssec": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/middleware-stack": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/middleware-user-agent": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/node-config-provider": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/node-http-handler": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/property-provider": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/protocol-http": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/querystring-builder": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/querystring-parser": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/service-error-classification": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/shared-ini-file-loader": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/signature-v4": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/signature-v4-multi-region": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/smithy-client": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/url-parser": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/util-arn-parser": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/util-base64-node": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/util-body-length-node": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/util-buffer-from": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/util-config-provider": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/util-defaults-mode-node": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/util-hex-encoding": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/util-middleware": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/util-stream-node": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/util-uri-escape": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/util-user-agent-node": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/util-utf8-browser": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/util-utf8-node": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/util-waiter": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "@aws-sdk/xml-builder": "https://ga.jspm.io/npm:@aws-sdk/[email protected]/dist-es/index.js",
        "buffer": "https://ga.jspm.io/npm:@jspm/[email protected]/nodelibs/browser/buffer.js",
        "child_process": "https://ga.jspm.io/npm:@jspm/[email protected]/nodelibs/browser/child_process.js",
        "crypto": "https://ga.jspm.io/npm:@jspm/[email protected]/nodelibs/browser/crypto.js",
        "entities": "https://ga.jspm.io/npm:[email protected]/lib/dev.index.js",
        "fast-xml-parser": "https://ga.jspm.io/npm:[email protected]/src/parser.js",
        "fs": "https://ga.jspm.io/npm:@jspm/[email protected]/nodelibs/browser/fs.js",
        "http": "https://ga.jspm.io/npm:@jspm/[email protected]/nodelibs/browser/http.js",
        "http2": "https://ga.jspm.io/npm:@jspm/[email protected]/nodelibs/browser/http2.js",
        "https": "https://ga.jspm.io/npm:@jspm/[email protected]/nodelibs/browser/https.js",
        "os": "https://ga.jspm.io/npm:@jspm/[email protected]/nodelibs/browser/os.js",
        "path": "https://ga.jspm.io/npm:@jspm/[email protected]/nodelibs/browser/path.js",
        "process": "https://ga.jspm.io/npm:@jspm/[email protected]/nodelibs/browser/process.js",
        "stream": "https://ga.jspm.io/npm:@jspm/[email protected]/nodelibs/browser/stream.js",
        "tslib": "https://ga.jspm.io/npm:[email protected]/tslib.es6.js",
        "url": "https://ga.jspm.io/npm:@jspm/[email protected]/nodelibs/browser/url.js",
        "util": "https://ga.jspm.io/npm:@jspm/[email protected]/nodelibs/browser/util.js",
        "uuid": "https://ga.jspm.io/npm:[email protected]/dist/esm-browser/index.js"
      },
      "https://ga.jspm.io/npm:@aws-crypto/[email protected]/": {
        "tslib": "https://ga.jspm.io/npm:[email protected]/tslib.es6.js"
      },
      "https://ga.jspm.io/npm:@aws-crypto/[email protected]/": {
        "tslib": "https://ga.jspm.io/npm:[email protected]/tslib.es6.js"
      }
    }
  }
  </script>
  
  <!-- ES Module Shims: Import maps polyfill for modules browsers without import maps support (all except Chrome 89+) -->
  <script async src="https://ga.jspm.io/npm:[email protected]/dist/es-module-shims.js" crossorigin="anonymous"></script>
  
  <script type="module">
    import * as SdkClientCognitoIdentityProvider from "@aws-sdk/client-cognito-identity-provider";
    import * as SdkClientKinesisVideo from "@aws-sdk/client-kinesis-video";
    import * as SdkClientKinesisVideoSignaling from "@aws-sdk/client-kinesis-video-signaling";
    import * as SdkClientS3 from "@aws-sdk/client-s3";
  
    // Write main module code here, or as a separate file with a "src" attribute on the module script.
    console.log(SdkClientCognitoIdentityProvider, SdkClientKinesisVideo, SdkClientKinesisVideoSignaling, SdkClientS3);
  </script>
</body>
</html>

@yenfryherrerafeliz yenfryherrerafeliz removed the needs-review This issue/pr needs review from an internal developer. label Apr 26, 2023
@JamesKyburz
Copy link
Author

JamesKyburz commented Sep 27, 2023

One way forward would be to

  • use moduleResolution node16 in tsconfig.json files to prevent invalid relative imports
  • add the exports (imports and require) to each package.json documented here

@JamesKyburz
Copy link
Author

Any news on this as Lambda Node 20 is probably coming soon?

@JamesKyburz
Copy link
Author

jest would probably have to be fixed too for this to be pushed forward?

jestjs/jest#13350

@JamesKyburz
Copy link
Author

Any news?

@cyrfer
Copy link

cyrfer commented Feb 27, 2024

bump!!!

@tgdn
Copy link

tgdn commented Mar 6, 2024

Any news?

1 similar comment
@JamesKyburz
Copy link
Author

Any news?

@RanVaknin
Copy link
Contributor

Hi everyone,

I apologize for not seeing this issue sooner.

ES node distribution is not offered since our ES distribution is for bundlers only.
Can you please share how having a ES distribution benefits your projects?

Thanks,
Ran~

@RanVaknin RanVaknin self-assigned this Jun 28, 2024
@RanVaknin RanVaknin added response-requested Waiting on additional info and feedback. Will move to \"closing-soon\" in 7 days. xl Effort estimation: very large and removed queued This issues is on the AWS team's backlog labels Jun 28, 2024
Copy link

github-actions bot commented Jul 9, 2024

This issue has not received a response in 1 week. If you still think there is a problem, please leave a comment to avoid the issue from automatically closing.

@github-actions github-actions bot added the closing-soon This issue will automatically close in 4 days unless further comments are made. label Jul 9, 2024
@cyrfer
Copy link

cyrfer commented Jul 9, 2024

I don't understand this statement:

our ES distribution is for bundlers only

I followed this issue because I had trouble building my application with your SDK when I wanted to use ESM everywhere in a serverless (Lambda) microservice.

I punted on building a ESM target for Lambda due to this issue. I've moved on and I only upload CommonJS to Lambda now. It's a shame as no one wants to read mangled CommonJS code and ESM would be so much more elegant when troubleshooting a Lambda application.

Please take all the feedback in this thread as a request for something better than what is currently offered.

@github-actions github-actions bot removed closing-soon This issue will automatically close in 4 days unless further comments are made. response-requested Waiting on additional info and feedback. Will move to \"closing-soon\" in 7 days. labels Jul 10, 2024
@kuhe
Copy link
Contributor

kuhe commented Jul 10, 2024

I see two feature requests in this issue:

1 - host a CDN distribution of the AWS SDK in the ESM format on a CDN called CloudFront

We don't plan to do this. We recommend using a web bundler to incorporate the AWS SDK into your application by downloading it from NPM.

2 - provide a Node.js ESM (MJS) distribution

We are not opposed to this, however it will be a large undertaking and it is not currently a planned project. Although there is a lot of engagement on this issue, it is mostly bumps and plus-ones. I would like to hear more about specific use cases, which could help increase the priority of this request. So far, I only see one reason provided, that of having easier-to-read code for troubleshooting on AWS Lambda.


For some context, we currently prioritize the CJS distribution for use in Node.js because *.mjs/module applications can import CJS libraries, but CJS applications cannot import ESM libraries. Our dist-es distribution is for bundlers, and any change to be Node.js-compatible must also preserve compatibility with all existing bundler use-cases. Another big chore, for example, is that as far as I can tell, we would have to rename all our *.ts files to *.mts in order to generate *.mjs distribution files using the TypeScript compiler. But then, how do we generate the CJS distribution? We may have to build a custom transform step for this.

@kuhe kuhe added feature-request New feature or enhancement. May require GitHub community feedback. and removed bug This issue is a bug. labels Jul 10, 2024
@kuhe kuhe changed the title non standard ESM published publish Node.js module compatible ESM (.mjs) artifacts Jul 18, 2024
@gp-jameskyburz
Copy link

@RanVaknin Thanks for the clarification, that makes sense. It does mean though when not using a bundler a lot of files need to be deleted that aren't used. i.e dist-es :)

I understand changing tsconfig to confirm to node compatible ESM would require a lot of work!

@RanVaknin RanVaknin assigned aBurmeseDev and unassigned RanVaknin Aug 19, 2024
@aBurmeseDev aBurmeseDev added the queued This issues is on the AWS team's backlog label Oct 10, 2024
@DanielOrtel
Copy link

DanielOrtel commented Oct 27, 2024

@kuhe while I understand the reluctance to do a large rewrite of the codebase, there are other ways to solve this issue:

1. Custom transformer

while Typescript itself does not have first-class support for appending extensions to the output, this could be solved with a custom transformer that simply appends the .js extension for local imports/export from definitions.

While not tested, based on what I could glean from the project setup and the outputs of the build:es, this would be safe to do, since the output files all use relative imports from .js files(a special case can be added for index files, which the moduleResolution: node supports). We don't have to worry about the more complex sides of the node module resolution algorithm, since this would only affect local relative imports from the package.

Potential downsides:

  • the introduction of another build tool, something like ts-patch, which would enable the addition of custom transformers to the build process, which could also potentially increase build times by ~2-10%. I don't know how the team here feels about this idea. Altough, this would be a temporary solution, since TS itself is considering adding first class support for custom transformers: A minimal custom transformer plugin proposal microsoft/TypeScript#54276
  • while I believe bundlers wouldn't have an issue with importing with file extensions, there may be some obscure cases where this change wouldn't be backwards compatible, requiring essentially a third build process, increasing overall build times another ~30%.

2. Monkey patch the existing build

If the build times/backwards compatibility is an issue, monkey patching the existing es build is also possibility in a way that ensures that the imported files exist. And the exports field can then be pointed to this new node-esm build. I know this sounds... wrong, but it's probably the most performant option.

3. Rollup

Or just use rollup for the build process, which can already do this, and would be backwards compatible with both cjs and browser esm. The project already uses vite in some places, so this wouldn't really be an extra dependency.

In case any of these sound like a viable solution, I'm open to help with this.

@kirillrdy
Copy link

I would like to hear more about specific use cases, which could help increase the priority of this request. So far, I only see one reason provided, that of having easier-to-read code for troubleshooting on AWS Lambda.

@kuhe frameworks like rails prefer using using importmaps https://guides.rubyonrails.org/working_with_javascript_in_rails.html

this can also apply to any non node.js backend that don't have nodejs stack

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature-request New feature or enhancement. May require GitHub community feedback. needs-discussion p2 This is a standard priority issue queued This issues is on the AWS team's backlog xl Effort estimation: very large
Projects
None yet
Development

No branches or pull requests