Allow type stripping in pnpm deploy monorepos
Personne n'a encore pris cette issue.
- Langage dominant
- JavaScript
- Étoiles
- 122k
- Forks
- 37.3k
- Merge moyen
- 4 j 2 h
- PR mergées (30 j)
- 283
Description
What is the problem this feature will solve?
node.js supports running a subset of typescript nativly, but for reasons doesn't allow this feature for files in node_modules.
A positive caveat is that node wants to support npm workspaces, where local sub packages are required thru node_modules. To do so it checks the real path of the file, and will type strip it if it's not within node_modules.
This also works in pnpm workspaces, but breaks in pnpm deploy. This repo demonstrates that behavior.
Read or run repro.sh steps to reproduce.
This difference between workspace and deploy structure
bin/node_modules/lib -> ../../lib
out/node_modules/lib -> .pnpm/lib@file++++lib/node_modules/lib
cause this error in out/index.ts, but not bin/index.ts
Error [ERR_UNSUPPORTED_NODE_MODULES_TYPE_STRIPPING]: Stripping types is currently unsupported for files under node_modules, for "file:///out/node_modules/.pnpm/lib@file++++lib/node_modules/lib/index.ts"
This would also break in npm, pnpm and other dependency managers that use install-links or other steps that indirect the workspace dependencies into node_modules.
What is the feature you are proposing to solve the problem?
Either remove the node_modules restriction, add more detection's for 'local node_modules' cases - such as private: true or a new marker, or establish export conditions for type stripping.
I am okay with emitting .js and using it in my deployed app, but I want to use .ts in development, and I don't want dev tools to require possibly stale .js files.
I think a reasonable solution is an export condition for 'type stripping not supported' that node would use to fallback to .js instead of erroring.
"exports": {
"unsupportedTypeStripping": "out/index.js",
"default": "src/index.ts",
}
What alternatives have you considered?
No response
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
Exécutez repro.sh et comparez le cas réussi bin/index.ts avec le cas échouant out/index.ts, y compris leurs chemins node_modules. Étudiez comment le chemin indirect de dépendance du workspace de pnpm deploy déclenche la restriction de suppression des types dans node_modules ; le travail est terminé lorsque l’application déployée peut utiliser la dépendance TypeScript du workspace sans ERR_UNSUPPORTED_NODE_MODULES_TYPE_STRIPPING, tout en permettant au développement de continuer à utiliser des fichiers .ts.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- javascript, node.js
- Domaine
- backend
- Type d'issue
- Fonctionnalité
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Activité
- Calme
- Clarté
- Plutôt claire
- Accessibilité débutants
- 45/100