jsii-pacmak打包丢失@aws-sdk/util-utf8-browser的dist文件致CDK报错
我维护一个CDK模式的monorepo,使用jsii构建、jsii-pacmak打包。因需要在某个模式中使用AWS-SDK模块,已将@aws-sdk/client-ec2、@aws-sdk/client-codestar-connections、@aws-sdk/client-sts加入bundledDependencies,并通过package.json的nohoist配置确保这些包安装在对应模式的node_modules目录下。
安装依赖并构建完成后,本地node_modules中的@aws-sdk/util-utf8-browser目录下存在三个dist-开头的文件夹,但执行jsii-pacmak打包后,提取生成的JS tarball时发现这些dist-文件夹丢失了,其他util-*模块未受此影响。
这直接导致执行cdk synth/deploy时出现模块找不到的错误,该模块的package.json中main字段正是指向丢失的dist-cjs/index.js路径。完整错误栈如下:
lalitkumarb@host cdk-patterns % cdk synth Error: Cannot find module 'packages/cdk-patterns/node_modules/my-cdk/node_modules/@aws-sdk/util-utf8-browser/dist-cjs/index.js'. Please verify that the package.json has a valid "main" entry at tryPackage (node:internal/modules/cjs/loader:353:19) at Function.Module._findPath (node:internal/modules/cjs/loader:566:18) at Function.Module._resolveFilename (node:internal/modules/cjs/loader:919:27) at Function.Module._resolveFilename.sharedData.moduleResolveFilenameHook.installedValue [as _resolveFilename] (my-cdk/node_modules/@cspotcode/source-map-support/source-map-support.js:811:30) at Function.Module._load (node:internal/modules/cjs/loader:778:27) at Module.require (node:internal/modules/cjs/loader:1005:19) at require (node:internal/modules/cjs/helpers:102:18) at Object.<anonymous> (packages/cdk-patterns/node_modules/my-cdk/node_modules/@aws-crypto/util/src/convertToBuffer.ts:5:1) at Module._compile (node:internal/modules/cjs/loader:1103:14) at Module._extensions..js (node:internal/modules/cjs/loader:1157:10) { code: 'MODULE_NOT_FOUND', path: 'packages/cdk-patterns/node_modules/my-cdk/node_modules/@aws-sdk/util-utf8-browser/package.json', requestPath: '@aws-sdk/util-utf8-browser' } Subprocess exited with error 1
我不确定这是JSII的bug还是自身操作配置有误,已在JSII仓库提交Issue并创建了复现仓库。目前核心需求是让jsii-pacmak打包时能将@aws-sdk/util-utf8-browser的三个dist-文件夹包含进去,以此解决问题。
使用版本:
- CDK: 2.81.0 (build bd920f2)
- @aws-sdk: 3.363.0
测试环境:
- Mac OS Ventura 13.4
- Ubuntu 20.04、22.04及最新版
更新:在AWS Cloud9的Amazon Linux和Ubuntu 18.04环境下测试打包正常,但GitHub Runner不支持这两个系统,且无法仅为打包环节使用自托管Runner。
内容的提问来源于stack exchange,提问作者Lalit Kumar B

