Improve interaction of the `preferLocal`, `node` and `nodePath` options
Right now:
- If the
nodeistrue, thenodePathoption is used to create the process. - If the
preferLocalistrue, thenodePathoption is used in the child process itself. - If the
preferLocalistrue, local binaries can be run.
Using preferLocal for 2 is a little unexpected. It seems like we should be using node: true instead since this relates to running Node.js and the nodePath option. Also, running local binaries is rather unrelated to choosing the Node.js version. It is odd to couple them.
On the other hand, by making 2 use node: true instead, we would be ensuring that the nodePath option is always used both to create the process and in the child process itself. For example, execaNode() currently uses the nodePath option in one case but not the other. Users should expect a consistent Node.js version both in the child process and the "grand-child" processes.
What do you think?
I agree. nodePath should be consistently used.
I think the reason for the current situation was due to implementation details. Namely, both features are implemented using the PATH environment variable, so the nodePath feature got piggybacked onto the preferLocal feature using the npm-run-path library.
I have created https://github.com/sindresorhus/npm-run-path/issues/17 to see if we could add some options to allow decoupling those two features in npm-run-path.