microsoft / microsoft/TypeScript
Using `"allowJs": true` and `"module": "commonjs"` to transform `.mjs` files should emit `.cjs` files
Personne n'a encore pris cette issue.
- Langage dominant
- Go
- Étoiles
- 111k
- Forks
- 14.4k
- Merge moyen
- 1 j 19 h
- PR mergées (30 j)
- 117
Description
Bug Report
🔎 Search Terms
CommonJS, allowJS, ESM, CJS, file extensions
🕗 Version & Regression Information
- This is the behavior in every version I tried, and I reviewed the FAQ for entries about output "file extensions for CommonJS modules".
⏯ Playground Link
Sandbox link with relevant code (I couldn't use the playground, since this involves using an .mjs file).
💻 Code
// package.json
{
"name": "tsc-mjs-extension-bug",
"version": "0.1.0",
"type": "commonjs",
"main": "dist/javascript.mjs",
"scripts": {
"build": "tsc",
"test": "node ."
},
"dependencies": {
"typescript": "5.1.3"
}
}
// tsconfig.json
{
"compilerOptions": {
"module": "commonjs",
"moduleResolution": "nodenext",
"allowJs": true,
"outDir": "dist"
}
"include": ["src"]
}
// src/javascript.mjs
export const where = "javascript";
console.log(`Hello ${where}`);
// src/typescript.ts
export const where = "typescript";
console.log(`Hello ${where}`);
🙁 Actual behavior
The javascript.mjs is transformed to CommonJS (as expected), but the file extension of the emitted file is still .mjs.
This breaks the package, since .mjs is supposed to be use exclusively for JavaScript using ESM and the emitted file now uses CommonJS.
🙂 Expected behavior
I would expect tsc to transform the src/javascript.mjs to CommonJS and either:
- emit it as
dist/javascript.cjsor alternatively - take into account the
"type": "commonjs"in the package.json and emit the file as.jsas it does with thesrc/typescript.tsfile.
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Reproduisez le problème avec package.json, tsconfig.json, src/javascript.mjs et src/typescript.ts du rapport, puis exécutez les scripts de build et de test. Comparez les extensions et les formats de module générés dans dist ; le travail est considéré comme terminé lorsque l’entrée .mjs transformée en CommonJS est générée avec une extension valide pour ce format, avec une couverture du comportement choisi.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- javascript, typescript
- Domaine
- compilers
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 42/100