módulos es6 - ¿Puede TypeScript importar dependencias ESM y CJS?
Estoy escribiendo una aplicación en TypeScript que utiliza dependencias instaladas con NPM:
- algunas de estas dependencias se exportan a través de CJS
- algunas de estas dependencias se exportan a través de ESM
¿Hay una configuración de tsconfig.json que me permita usar todas estas dependencias de manera transparente?
Respuesta #1
¡Sí puede!
Por ejemplo, este es un proyecto nuevo de Módulo ES con una dependencia ESM (chalk) y una dependencia common.js (aes-js):
package.json:
{
"type": "module",
"private": true,
"scripts": {
"build": "tsc",
"start": "yarn build && node dist/index.js"
},
"license": "ISC",
"devDependencies": {
"@types/aes-js": "^3.1.1",
"typescript": "^4.8.4"
},
"dependencies": {
"aes-js": "^3.1.2",
"chalk": "^5.1.2"
}
}
index.ts:
import chalk from "chalk"
import aesjs from "aes-js"
console.log(chalk.blue(aesjs.utils.utf8.toBytes("this is a string")))
tsconfig.json
{
"compilerOptions": {
"target": "es2022",
"module": "es2022",
"esModuleInterop": true,
"moduleResolution": "node",
"forceConsistentCasingInFileNames": true,
"strict": true,
"skipLibCheck": true,
"outDir": "dist"
}
}
Explicación: esModuleInterop es tu amigo. Se asegura de que module.exports = se convierta en una exportación por defecto (CommonJS -> ES6) y viceversa, asegurando que las exportaciones por defecto sean lo mismo que module.exports = (ES6 -> CommonJS)
