ES6 modulok - Tudja a TypeScript mind az ESM, mind a CJS függőségeket importálni?
Egy TypeScript alkalmazást írok, amely NPM-mel telepített függőségeket használ:
- néhány ilyen függőség CJS-en keresztül exportál
- némelyik ezek közül a függőségek ESM-en keresztül exportál
Van olyan tsconfig.json konfiguráció, ami lehetővé tenné számomra, hogy átláthatóan használjam az összes ilyen függőséget?
Válasz #1
Igen, tud!
Például ez egy friss ES modul projekt egy ESM függőséggel (chalk) és egy common.js függőséggel (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"
}
}
Magyarázat: a esModuleInterop a barátod. Ez biztosítja, hogy a module.exports = át legyen alakítva alapértelmezett exporttá (CommonJS -> ES6), és fordítva, biztosítva, hogy az alapértelmezett exportok ugyanazok legyenek, mint a module.exports = (ES6 -> CommonJS).
