Skip to content

Bundler tries to bundle @aws-sdk/shared-ini-file-loader for browsers #1352

@AllanZhengYP

Description

@AllanZhengYP

Describe the bug
Bundler(webpack) tries to bundle package @aws-sdk/shared-ini-file-loader even the package is supposed to be Node-only.

Webpack log:
  Asset      Size  Chunks             Chunk Names
main.js  5.49 MiB    main  [emitted]  main
Entrypoint main = main.js
[0] multi (webpack)-dev-server/client?http://localhost:9000 (webpack)/hot/dev-server.js ./src/browser/index.js 52 bytes {main} [built]
[./node_modules/webpack-dev-server/client/index.js?http://localhost:9000] (webpack)-dev-server/client?http://localhost:9000 4.29 KiB {main} [built]
[./node_modules/webpack-dev-server/client/overlay.js] (webpack)-dev-server/client/overlay.js 3.51 KiB {main} [built]
[./node_modules/webpack-dev-server/client/socket.js] (webpack)-dev-server/client/socket.js 1.53 KiB {main} [built]
[./node_modules/webpack-dev-server/client/utils/createSocketUrl.js] (webpack)-dev-server/client/utils/createSocketUrl.js 2.91 KiB {main} [built]
[./node_modules/webpack-dev-server/client/utils/log.js] (webpack)-dev-server/client/utils/log.js 964 bytes {main} [built]
[./node_modules/webpack-dev-server/client/utils/reloadApp.js] (webpack)-dev-server/client/utils/reloadApp.js 1.59 KiB {main} [built]
[./node_modules/webpack-dev-server/client/utils/sendMessage.js] (webpack)-dev-server/client/utils/sendMessage.js 402 bytes {main} [built]
[./node_modules/webpack-dev-server/node_modules/strip-ansi/index.js] (webpack)-dev-server/node_modules/strip-ansi/index.js 161 bytes {main} [built]
[./node_modules/webpack/hot sync ^\.\/log$] (webpack)/hot sync nonrecursive ^\.\/log$ 170 bytes {main} [built]
[./node_modules/webpack/hot/dev-server.js] (webpack)/hot/dev-server.js 1.59 KiB {main} [built]
[./node_modules/webpack/hot/emitter.js] (webpack)/hot/emitter.js 75 bytes {main} [built]
[./node_modules/webpack/hot/log-apply-result.js] (webpack)/hot/log-apply-result.js 1.27 KiB {main} [built]
[./node_modules/webpack/hot/log.js] (webpack)/hot/log.js 1.34 KiB {main} [built]
[./src/browser/index.js] 1020 bytes {main} [built]
    + 596 hidden modules

ERROR in ./src/shared/utils.js
Module not found: Error: Can't resolve '@aws-sdk/client-s3' in '/Users/zheallan/workspace/aws-sdk-js-tests/src/shared'
 @ ./src/shared/utils.js 7:15-44
 @ ./src/browser/index.js

ERROR in ./node_modules/@aws-sdk/shared-ini-file-loader/dist/cjs/index.js
Module not found: Error: Can't resolve 'fs' in '/Users/zheallan/workspace/aws-sdk-js-tests/node_modules/@aws-sdk/shared-ini-file-loader/dist/cjs'
 @ ./node_modules/@aws-sdk/shared-ini-file-loader/dist/cjs/index.js 6:11-24
 @ ./node_modules/@aws-sdk/retry-config-provider/dist/cjs/fromSharedConfigFiles.js
 @ ./node_modules/@aws-sdk/retry-config-provider/dist/cjs/defaultProvider.js
 @ ./node_modules/@aws-sdk/retry-config-provider/dist/cjs/index.js
 @ ./node_modules/@aws-sdk/middleware-retry/dist/cjs/defaultStrategy.js
 @ ./node_modules/@aws-sdk/middleware-retry/dist/cjs/index.js
 @ ./node_modules/@aws-sdk/client-cognito-identity/dist/es/CognitoIdentityClient.js
 @ ./node_modules/@aws-sdk/client-cognito-identity/dist/es/index.js
 @ ./src/shared/utils.js
 @ ./src/browser/index.js
ℹ 「wdm」: Failed to compile.

SDK version number
Any clients on 1.0.0-gamma.3

Is the issue in the browser/Node.js/ReactNative?
Browser/ReactNative(possible)

To Reproduce (observed behavior)
clone https://github.com/aws-samples/aws-sdk-js-tests/tree/issue-1352, yarn & yarn start:browser

Root Cause
TL;DR: ES modules are not included in released for package retry-config-resolver
middleware-retry package is suppose to be runtime-neutural. However it depends on retry-config-provider:

import { DEFAULT_MAX_ATTEMPTS } from "@aws-sdk/retry-config-provider";

Except for DEFAULT_MAX_ATTEMPTS, the retry-config-provider package also contains Nodejs-specific config resolving chain:
memoize(
chain(
fromEnv(envVarName),
fromSharedConfigFiles(configuration, configKey),
fromStatic(defaultValue)
)
);

If bundler uses ESM for package retry-config-resolver, importing DEFAULT_MAX_ATTEMPTS has nothing to do with defaultProvider. However, for some reason the package only provide CJS module. The 2 artifactes are picked up by bundler together. So bundler will complain about fs within defaultProvider even though it's not used.

Metadata

Metadata

Assignees

Labels

bugThis issue is a bug.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions