Skip to content

Allow type stripping in pnpm deploy monoreposΒ #61793

@everett1992

Description

@everett1992

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    feature requestIssues that request new features to be added to Node.js.

    Type

    No type

    Projects

    Status

    Awaiting Triage

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions