Allow type stripping in pnpm deploy monorepos
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- JavaScript
- Estrellas
- 122k
- Forks
- 37.3k
- Merge medio
- 4 d 2 h
- PR fusionados (30 d)
- 283
Descripción
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
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Ejecuta repro.sh y compara el caso exitoso de bin/index.ts con el caso fallido de out/index.ts, incluidos sus paths de node_modules. Investiga cómo el path indirecto de dependencia del workspace de pnpm deploy activa la restricción de eliminación de tipos en node_modules; se considera terminado cuando la aplicación desplegada puede usar la dependencia de TypeScript del workspace sin ERR_UNSUPPORTED_NODE_MODULES_TYPE_STRIPPING, mientras que el desarrollo puede seguir usando archivos .ts.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- javascript, node.js
- Área
- backend
- Tipo de issue
- Nueva funcionalidad
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Estado de actividad
- Tranquilo
- Claridad
- Bastante claro
- Aptitud para principiantes
- 45/100