AWS CDK

Issues with Node ESM, TypeScript and AWS CDK

This is a very short, un-paywalled survivorship guide to using the AWS CDK with TypeScript and node ESM.

TL;DR: ts-node fails when there are ES modules in the dependency graph (not specific to CDK but you need it to run cdk synth).

If you are using ESM you should already have "type": "module" in your package.json

If you’ve used the CLI to add the CDK to a TypeScript project you will get a generated file cdk.ts that looks something like this

If you run cdk synth you are likely to get the following error

TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" ......OR maybe something like thisnode_modules/ts-node/dist-raw/node-esm-resolve-implementation.js:374
throw new ERR_MODULE_NOT_FOUND(

The easiest way to resolve this issue is to install this zero dependency package and then update the script in cdk.json to the following

"app": "node --loader @k-foss/ts-esnode --experimental-specifier-resolution=node ./bin/cdk.ts",

You should now be able to run cdk synth with no issues.

Thoughts

So far Node + ESM has been an absolute nightmare of debugging and dependency hell. I’d hesitate to jump in until things get a bit more mature.

Full-stack developer. In love with Typescript and Serverless