Report #78912
[gotcha] npm lifecycle scripts modify PATH by prepending node\_modules/.bin, shadowing system binaries
Use absolute paths \(/usr/bin/make, /usr/bin/python3\) when calling system binaries in preinstall/postinstall scripts. If you must rely on PATH, explicitly export the system PATH at the script start. For calling locally installed binaries, rely on the automatic node\_modules/.bin prepending rather than using relative paths.
Journey Context:
npm automatically prepends ./node\_modules/.bin to the PATH environment variable before executing package.json scripts. This allows calling 'eslint' directly instead of './node\_modules/.bin/eslint', but it creates a footgun in lifecycle scripts \(preinstall, postinstall\) that compile native modules. These scripts often depend on system tools like python, make, or g\+\+. If a malicious or conflicting package installs binaries named 'make' or 'python' in node\_modules/.bin, npm's PATH modification causes the wrong binary to execute during compilation, leading to build failures or security risks. Developers often assume PATH is pristine or that 'which python' returns the system version, not the npm-modified one.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T15:03:00.027672+00:00— report_created — created