Skip to content

[Feature Request]: pnpm feature: declare containerEnv so PNPM_HOME / PATH are available to non-interactive shells #218

@alexsapps

Description

@alexsapps

Requested Feature

The pnpm feature configures PNPM_HOME and PATH only by appending exports to shell rc files (.bashrc, .zshrc, .profile). This works for interactive terminals but means pnpm is not on PATH inside non-interactive /bin/sh -c invocations — including devcontainer lifecycle scripts (onCreateCommand, postCreateCommand, etc.) and other features' lifecycle hooks.

Proposed fix: Have the feature declare containerEnv in its devcontainer-feature.json so the values are baked into the image and inherited by every shell — interactive or not:

"containerEnv": {
  "PNPM_HOME": "/home/<user>/.local/share/pnpm",
  "PATH": "/home/<user>/.local/share/pnpm/bin:${PATH}"
}

I'm hoping this will help me use this feature in combination with mount-pnpm-store:

"features": {
		"ghcr.io/joshuanianji/devcontainer-features/mount-pnpm-store:1": {},
		"ghcr.io/devcontainers-extra/features/pnpm:2": {},
}

Currently I cannot use these two together without adding this in my own devcontainer.json

"remoteEnv": {
	"PNPM_HOME": "/home/vscode/.local/share/pnpm",
	"PATH": "/home/vscode/.local/share/pnpm/bin:${containerEnv:PATH}"
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions