es6-moduulit - Voiko TypeScript tuoda sekä ESM- että CJS-riippuvuudet?
Kirjoitan TypeScript-sovellusta, joka käyttää NPM:llä asennettuja riippuvuuksia:
- joidenkin näiden riippuvuuksien vienti tapahtuu CJS:n kautta
- joistakin näistä riippuvuuksista viedään ESM:n kautta
Onko olemassa tsconfig.json-asetusta, joka antaisi minun käyttää kaikkia näitä riippuvuuksia läpinäkyvästi?
Vastaus #1
Kyllä se voi!
Esimerkiksi tämä on uusi ES-moduuliprojekti, jossa on ESM-riippuvuus (chalk) ja common.js-riippuvuus (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"
}
}
Selitys: esModuleInterop on ystäväsi. Se varmistaa, että module.exports = muutetaan oletusvienniksi (CommonJS -> ES6) ja päinvastoin, varmistaen, että oletusviedot ovat samoja kuin module.exports = (ES6 -> CommonJS)
