Open AllanZhengYP opened 1 year ago
It would be nice to use exports with conditions as it described in https://nodejs.org/dist/latest-v19.x/docs/api/packages.html#exports without using legacy fields like 'browser', 'module', etc.
Hi @AllanZhengYP, thanks for opening this issue. I was able to reproduce the reported behavior by doing the steps below. So, I will mark this issue as for review so we can address this further.
Steps to reproduce:
yarn dev
Thanks!
Hi, any update on this? I get this problem with NextJs 13 when using webpack. The only difference is that I have app
directory enabled (https://github.com/aws-amplify/amplify-js/issues/11030). It makes working with the project problematic as it slows down bundling a lot.
Module not found: Can't resolve 'aws-crt' in '/Users/tomekm/Desktop/tixy-frontend/node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-sdk/util-user-agent-node/dist-cjs'
Import trace for requested module:
./node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-sdk/util-user-agent-node/dist-cjs/is-crt-available.js
./node_modules/@aws-sdk/client-lex-runtime-service/node_modules/@aws-sdk/util-user-agent-node/dist-cjs/index.js
./node_modules/@aws-sdk/client-lex-runtime-service/dist-cjs/runtimeConfig.js
./node_modules/@aws-sdk/client-lex-runtime-service/dist-cjs/LexRuntimeServiceClient.js
./node_modules/@aws-sdk/client-lex-runtime-service/dist-cjs/index.js
./node_modules/@aws-amplify/interactions/lib/Providers/AWSLexProvider.js
./node_modules/@aws-amplify/interactions/lib/index.js
./node_modules/aws-amplify/lib/index.js
./src/graphql/amplifyConfigure.ts
./node_modules/@aws-sdk/client-lex-runtime-v2/node_modules/@aws-sdk/util-user-agent-node/dist-cjs/is-crt-available.js
Module not found: Can't resolve 'aws-crt' in '/Users/
Is there an ETA on the fix? As of NextJs 13.4, the app directory was marked stable. This error is inhibiting development with a popular and widely used framework.
Like @AllanZhengYP mentioned:
This is not a strict bug report since Turbopack hasn't been stablized yet. However, it's the minor issues in the AWS SDK blocking the Turbopack.
We will look into it when Turbopack becomes stable.
@ndueber and @Tomekmularczyk the issue you are describing is unrelated to Turbopack. Please open a separate issue, and fill the intake form and repro steps so we can better assist you.
Thanks, Ran~
Like @AllanZhengYP mentioned:
This is not a strict bug report since Turbopack hasn't been stablized yet. However, it's the minor issues in the AWS SDK blocking the Turbopack.
We will look into it when Turbopack becomes stable.
@ndueber and @Tomekmularczyk the issue you are describing is unrelated to Turbopack. Please open a separate issue, and fill the intake form and repro steps so we can better assist you.
Thanks, Ran~
There is an issue opened already: https://github.com/aws-amplify/amplify-js/issues/11030
Like @AllanZhengYP mentioned:
This is not a strict bug report since Turbopack hasn't been stablized yet. However, it's the minor issues in the AWS SDK blocking the Turbopack.
We will look into it when Turbopack becomes stable.
@ndueber and @Tomekmularczyk the issue you are describing is unrelated to Turbopack. Please open a separate issue, and fill the intake form and repro steps so we can better assist you.
Thanks, Ran~
@RanVaknin - This issue still happens if you are using webpack instead of turbopack with next's app directory, so it does not make sense to wait until turbopack is "stable" before fixing.
I want. to say this problem still exists when i am using SES service
- wait compiling /api/feedback/route (client and server)...
- warn ./node_modules/@aws-sdk/util-user-agent-node/dist-cjs/is-crt-available.js
Module not found: Can't resolve 'aws-crt' in '/Users/snowden/Documents/GitHub/cv-cover/node_modules/@aws-sdk/util-user-agent-node/dist-cjs'
Import trace for requested module:
./node_modules/@aws-sdk/util-user-agent-node/dist-cjs/is-crt-available.js
./node_modules/@aws-sdk/util-user-agent-node/dist-cjs/index.js
./node_modules/@aws-sdk/client-sesv2/dist-cjs/runtimeConfig.js
./node_modules/@aws-sdk/client-sesv2/dist-cjs/SESv2Client.js
./node_modules/@aws-sdk/client-sesv2/dist-cjs/index.js
./src/app/api/feedback/route.ts
Failed to send email.
Any news on that? This is blocking a lot of NextJS 13 users. Thanks! :)
+1
+1
+1
+1
Hey guys I also had this problem when using v5 of the lib, but after upgrading to aws-amplify v6 turbopack works without errors 💯
Hope this help others 💯
@joaopedrodcf Hey guys I also had this problem when using v5 of the lib, but after upgrading to aws-amplify v6 turbopack works without errors 💯
Same here, I've done the following upgrades and this problem has gone away:
Before
"@aws-sdk/client-api-gateway": "^3.370.0",
"@aws-sdk/client-lambda": "^3.548.0",
"@aws-sdk/client-s3": "^3.332.0",
"@aws-sdk/client-sfn": "^3.319.0",
"@aws-sdk/client-sqs": "^3.328.0",
"@aws-sdk/credential-provider-env": "^3.535.0",
"@aws-sdk/s3-request-presigner": "^3.332.0",
After
"@aws-sdk/client-api-gateway": "^3.583.0",
"@aws-sdk/client-lambda": "^3.583.0",
"@aws-sdk/client-s3": "^3.583.0",
"@aws-sdk/client-sfn": "^3.583.0",
"@aws-sdk/client-sqs": "^3.583.0",
"@aws-sdk/s3-request-presigner": "^3.583.0"
Checkboxes for prior research
Describe the bug
The AWS SDK packages to broken in Turbopack, complaining node-specific artifacts cannot be resolved. This is not a strict bug report since Turbopack hasn't been stablized yet. However, it's the minor issues in the AWS SDK blocking the Turbopack.
I can implement the fix if I have bendwidth. I documented the detailed changes needed below, feel free to pick them up.
SDK version number
@aws-sdk/client-*@all
Which JavaScript Runtime is this issue in?
Browser
Details of the browser/Node.js/ReactNative version
N/A
Reproduction Steps
Checkout the
with-s3-client
branch of the Next 13 test repo, and start dev server withyarn dev
.Observed Behavior
FS related module cannot be resolved error.
Expected Behavior
The bundling should not have problems
Possible Solution
Because of the lack of the documentation I spent quite a lot of time in the Turbopack bundling and found the 3 fixed below is needed for the code to work in Turbopack for client-side rendering:
Add extensions to browser field: Latest version of AWS SDK browser field looks like:
It works well with all the other bundlers, but Turbopack is more strict. It requires
.js
extension for both key and value.The package
@aws-sdk/util-user-agent-node
specifies optional dependency "aws-crt". The dependency is, even though only exists in Node.js specific code path, still loaded and analyzed by Turbopack and hence causing "Unable to resolve package" error. This particular issue may be a Turbopack issue, but I find it can be worked around with a fix on AWS SDK side — usingcreateRequire
in thedist-es
artifact to require optional dependencies instead of callingrequire()
directly. The fix on the AWS SDK side is more "correct" as the current implementation does miss some considerations.The package
@aws-sdk/signature-v4-multi-region
packaga containsrequire()
api to assert the optional Node.js specific dependency@aws-sdk/signature-v4-crt
(link). The being in the browser code path is causing errors in the Turbopack. This code can be moved to a separate file and disabled in Node.js runtime:// SignatureV4MultiRegion.js getSigv4aSigner() { if (!this.sigv4aSigner) { let CrtSignerV4; try { CrtSignerV4 = loadSignv4aSignerCtr(); // <==== here's the change if (typeof CrtSignerV4 !== "function") throw new Error(); } catch (e) { e.message =
${e.message}\nPlease check if you have installed "@aws-sdk/signature-v4-crt" package explicitly. \n
+ "For more information please go to " + "https://github.com/aws/aws-sdk-js-v3#functionality-requiring-aws-common-runtime-crt"; throw e; } this.sigv4aSigner = new CrtSignerV4({ ...this.signerOptions, signingAlgorithm: 1, }); } return this.sigv4aSigner; }//package.json "browser": { "./dist-es/loadSigv4aSignerCtor.js": false, "@aws-sdk/signature-v4-crt": false },