Erreur TypeScript : ReferenceError : exports is not defined lors de la compilation
Bonjour à tous ! Je suis débutant en TypeScript et j’ai rencontré un problème en essayant de compiler et d’exécuter mon projet. J’utilise Node.js (version 18) et TypeScript (version 5.0). Voici mon code simple :
```typescript
// math.ts
export function add(a: number, b: number): number {
return a + b;
}
export const PI = 3.14;
```
```typescript
// main.ts
import { add, PI } from './math';
console.log(add(2, 3));
console.log(PI);
```
J’ai compilé le code avec la commande `tsc main.ts` et obtenu les fichiers `math.js` et `main.js`. Quand j’exécute `node main.js`, une erreur apparaît :
```
ReferenceError: exports is not defined
at Object. (/path/to/main.js:2:23)
```
Dans les fichiers JS générés, je vois l’utilisation de `exports.add = ...` et `exports.PI = ...`. J’ai lu que cela est dû au fait que TypeScript compile en modules CommonJS par défaut, mais Node.js avec `"type": "module"` dans `package.json` attend des modules ES. Pour résoudre ce problème, vous devez configurer votre `tsconfig.json` pour utiliser `"module": "ESNext"` ou `"module": "NodeNext"`, et définir `"moduleResolution": "NodeNext"`. Assurez-vous également que votre `package.json` contient `"type": "module"` pour que Node.js interprète les fichiers `.js` comme des modules ES. Sinon, vous pouvez utiliser `"module": "CommonJS"` et supprimer `"type": "module"` de `package.json`. Voici un exemple de configuration `tsconfig.json` :
```json
{
"compilerOptions": {
"target": "ES2020",
"module": "ESNext",
"moduleResolution": "NodeNext",
"outDir": "./dist",
"rootDir": "./src",
"strict": true,
"esModuleInterop": true
}
}
```
Après avoir modifié la configuration, recompilez avec `tsc` et exécutez `node dist/main.js`. Si vous utilisez `"module": "CommonJS"`, assurez-vous que votre `package.json` n’a pas `"type": "module"`. J’espère que cela vous aidera !