ES6 moduli - Može li TypeScript uvesti i ESM i CJS ovisnosti?
Pišem TypeScript aplikaciju koja koristi ovisnosti instalirane putem NPM-a:
- neke od ovih ovisnosti se izvoze putem CJS-a
- neke od ovih ovisnosti se izvoze putem ESM-a
Postoji li tsconfig.json konfiguracija koja bi mi omogućila transparentno korištenje svih ovih ovisnosti?
Odgovor #1
Da, može!
Na primjer, ovo je svjež ES Module projekt s ESM zavisnošću (chalk) i common.js zavisnošću (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"
}
}
Objašnjenje: esModuleInterop je vaš prijatelj. Osigurava da module.exports = bude pretvoreno u zadani izvoz (CommonJS -> ES6) i obrnuto, osiguravajući da su zadani izvozi isti kao module.exports = (ES6 -> CommonJS)
