nodejs / nodejs/node

Allow type stripping in pnpm deploy monorepos

Ouverte
#61,793 10 commentaires 3 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

feature request
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

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. 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

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.