Back to list
jasonkuhrt

running-binaries

by jasonkuhrt

Tool configurations

1🍴 0📅 Jan 22, 2026

SKILL.md


name: running-binaries description: How to run Node.js package binaries with npm/pnpm/npx. Use when installing global packages, running CLI tools, or configuring editor formatters.

Running Binaries

CRITICAL

DO NOT assume pnpm and npm CLIs are equivalent for running binaries.

The matrix is complex and getting it wrong causes subtle failures.

npm globals must be decoupled from pnpm node versions

pnpm manages node versions via pnpm env use. If npm globals are installed to pnpm's node directory, switching node versions breaks your global tools (claude-code, dprint, etc. vanish).

Solution: Set npm prefix to a fixed location:

# .npmrc
prefix=~/.npm-global

This keeps globals at ~/.npm-global/bin/ regardless of which node version pnpm is using.

Architecture

┌─────────────────────────────────────────────────────────────────┐
│ PATH order (first wins)                                         │
├─────────────────────────────────────────────────────────────────┤
│ ~/.npm-global/bin      ← npm globals (claude, dprint, nx, etc) │
│ ~/Library/pnpm         ← pnpm binaries (node, npm, pnpm)       │
│ /opt/homebrew/bin      ← brew (fallback node, initial pnpm)    │
└─────────────────────────────────────────────────────────────────┘
ToolManagesLocation
HomebrewInitial bootstrap (node + pnpm)/opt/homebrew/bin
pnpmNode versions (pnpm env use)~/Library/pnpm/nodejs/<ver>
npmGlobal CLI tools~/.npm-global (fixed, version-agnostic)

Bootstrap flow (fresh machine)

  1. brew install node pnpm — initial node + pnpm
  2. pnpm env use --global lts — pnpm installs its own node, shadows brew's
  3. Install npm globals to ~/.npm-global

After bootstrap, brew's node is effectively unused (pnpm's comes first in PATH).

The Matrix

Running binaries (exec commands)

CommandIn project (has package.json)Outside project
npx <pkg>local node_modules → npm global → downloadsnpm global → downloads
pnpm exec <pkg>local node_modules → pnpm globalFAILS with ERR_PNPM_RECURSIVE_EXEC_NO_PACKAGE
pnpm dlx <pkg>downloads to temp (ignores local)downloads to temp
Direct <pkg>uses PATHuses PATH

Key insight: npx finds pnpm-installed LOCAL packages

npx checks node_modules/.bin/ regardless of which package manager installed them. So in a pnpm project, npx dprint finds the local dprint.

Key insight: npx uses npm's global prefix

npx reads npm's config (~/.npmrc) to find globals. With prefix=~/.npm-global, npx checks there:

npx <cmd>  →  local node_modules  →  ~/.npm-global  →  downloads

This is why we use npm (not pnpm) for globals.

Recommendations

For global packages

Use npm with a fixed prefix:

# .npmrc sets prefix=~/.npm-global
npm install -g dprint

# Now works everywhere:
npx dprint --version    # finds ~/.npm-global/bin/dprint
dprint --version        # finds via PATH

For editor/tool integration (Zed, VSCode, etc.)

Option A: npx (recommended)

{
  "command": "npx",
  "arguments": ["dprint", "fmt", "--stdin", "markdown"]
}

Uses local version if in project, falls back to npm global, downloads if needed.

Option B: Direct PATH call

{
  "command": "dprint",
  "arguments": ["fmt", "--stdin", "markdown"]
}

Works if package is in PATH.

Common mistakes

Mistake: npm globals tied to pnpm node version

# Without fixed prefix, npm installs to pnpm's node directory:
npm install -g dprint  # → ~/Library/pnpm/nodejs/24.12.0/lib/...

pnpm env use 22        # switch node version
dprint --version       # ERROR: not found (it's in 24.12.0 dir)

Fix: Set prefix=~/.npm-global in .npmrc

Mistake: Assuming pnpm exec works everywhere

# In project: works
cd my-project && pnpm exec dprint --version

# Outside project: FAILS
cd /tmp && pnpm exec dprint --version
# ERR_PNPM_RECURSIVE_EXEC_NO_PACKAGE

Mistake: Assuming pnpx = npx

pnpx (alias for pnpm dlx) always downloads to temp. It does NOT check local or global.

npx dprint --version   # → checks local, then global, then downloads
pnpx dprint --version  # → always downloads (ignores local/global)

Summary table

GoalSolution
Run local package in projectnpx <pkg> or pnpm exec <pkg>
Run global package anywhereInstall with npm -g, run with npx or directly
Globals survive node version changesSet prefix=~/.npm-global in .npmrc
Editor formatternpx <pkg> (works everywhere)

References

Score

Total Score

55/100

Based on repository quality metrics

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

0/10
説明文

100文字以上の説明がある

0/10
人気

GitHub Stars 100以上

0/15
最近の活動

1ヶ月以内に更新

+10
フォーク

10回以上フォークされている

0/5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

+5
タグ

1つ以上のタグが設定されている

+5

Reviews

💬

Reviews coming soon