[Bug]: herd isolate-node ignores --site and writes .nvmrc into the current folder
Nobody has claimed this yet.
Assessment
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Newbie friendliness
- 76/100
Research direction
Start with cli/app.php:1592 and cli/Valet/Site.php:1303-1306 to trace how --site selects the target path; compare with the unisolate-node handling at cli/app.php:1619. Also inspect bin/herd:148, where the shell hook checks for --site=. Done means isolation writes .nvmrc in the named site's folder, an unknown site returns an error, and the hook handles the documented argument order without changing the current folder's Node version.
Written by the indexing model from the issue text.
Description
Platform
macOS
Operating system version
macOS 27.0.1 (26A434)
System architecture
ARM64 (M1, M2, etc)
Herd Version
2.0.2 (Build: 71)
PHP Version
n/a (Node 26.12.0 through Herd's nvm; global PHP is 8.5.10)
Bug description
herd isolate-node 26 --site=example ignores --site. The docs show this form for sites whose name doesn't match their folder, but the .nvmrc lands in the current folder instead of the site's, overwriting any .nvmrc already there. It still says "The site is now using Node 26." and exits 0, even for a site that doesn't exist.
herd unisolate-node --site=example does look in the site's folder, so it says it worked and leaves the stray .nvmrc behind.
Because nvm and Herd's shell hook pick up .nvmrc from parent folders, running it from ~/Herd would switch Node for every site below it without its own .nvmrc (I saw the hook switch after a cd into a subfolder). From the hook's code it would also nvm install a missing version; I didn't test that.
Expected: the .nvmrc goes into the site's folder, and an unknown site name gives an error.
Cause (herd.phar 2.0.2): isolate-node always passes getcwd() to Site::isolateNode() (cli/app.php:1592), which uses that path whenever it's set (cli/Valet/Site.php:1303-1305), so the site lookup at :1306 never runs. unisolate-node passes no path (app.php:1619), so it finds the site.
Possible fix: pass null instead of getcwd() when --site is set (app.php:1592, and :1580 for the form without a version).
Also: bin/herd:148 only checks $2 for --site=, so with the docs' argument order (and for --help) it runs nvm use in the current folder as well.
Thanks for the quick fixes on #1770 and #1771.
Steps to reproduce
- Herd 2.0.2 with any installed Node version (26 here) and a linked or parked site
examplethat has no.nvmrc. - From a folder that isn't a site:
mkdir ~/herd-test && cd ~/herd-test, thenherd isolate-node 26 --site=example. ls -A ~/herd-test ~/Herd/example: the.nvmrcis in~/herd-test, not in the site's folder, andherd isolated-nodedoesn't list the site.herd unisolate-node --site=example: it says it worked, but~/herd-test/.nvmrcis still there.- Clean up with
rm ~/herd-test/.nvmrc.
Relevant log output
# Paths changed for privacy. For the linked-site part I ran herd.phar against a copy of my Herd config, so my real setup stayed untouched.
# Same behaviour with a stock .zshrc (only Herd's own lines) and with no shell config at all.
$ cd ~/herd-test
$ herd isolate-node --site=example 26
The site is now using Node 26.
$ ls -A ~/herd-test
.nvmrc
$ cat ~/herd-test/.nvmrc
26
$ ls -A ~/Herd/example
$ herd isolated-node
+------+--------------+
| Path | Node Version |
+------+--------------+
$ herd unisolate-node --site=example
The site is now using the default Node version.
$ ls -A ~/herd-test
.nvmrc
# The docs' argument order, with a site name that doesn't exist:
$ cd ~/herd-test2
$ herd isolate-node 26 --site=nosuchsite
The site is now using Node 26.
Found '~/herd-test2/.nvmrc' with version <26>
Now using node v26.12.0 (npm v11.20.0)
$ echo $?
0
- Dominant language
- No language data
- Stars
- 124
- Forks
- 1
- PR merge metrics
- No merged PRs in 30d
Getting set up
This project ships no dev container, Dockerfile or contributing guide, so setting up is up to you: start from its README, and see our first-contribution guide for the general steps.
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from beyondcode/herd-community
-
fixed-in-next-release macOS
Difficulty 2/5 1-3 hours Newbie friendliness 83/100
beyondcode/herd-community#1771 ·
-
[Bug]: PHP 8.3 php.ini missing auto_prepend_file and herd-ext extension lines (dump() undefined)OpenmacOS
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
beyondcode/herd-community#1693 ·
-
macOS
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
beyondcode/herd-community#1602 ·
-
windows
Difficulty 4/5 3-5 days Newbie friendliness 35/100
beyondcode/herd-community#1778 ·
-
windows
Difficulty 4/5 3-5 days Newbie friendliness 45/100
beyondcode/herd-community#1777 ·
All issues in beyondcode/herd-community
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
OpenSourceAWE/SymbolicAWEModels.jl#431 ·
Maintainers usually reply within 1 day
-
bug needs-triage
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100