jonschlinkert / global-prefix

Get the npm global path prefix. Same code used internally by npm.
MIT License
28 stars 12 forks source link

Process created using pkg returns the wrong path #30

Open MorCohenAres opened 2 years ago

MorCohenAres commented 2 years ago

The module doesn't return the correct path when running as a self-executable process (not directly using node). This happens due to the usage of process.execPath which is assumed to return node/node.exe but that isn't always the case.

Steps to reproduce:

  1. Install pkg globally: npm i -g pkg
  2. Install global-prefix locally
  3. Create a new file myApp.js, type in console.log(require('global-prefix'))
  4. Run node index.js -> You get something like /usr/bin/ or /Users/MY_USERNAME/.nvm/versions/node/v14.20.0
  5. Now create a self-executable file for the local project: pkg myApp.js -t linux / pkg myApp.js -t macos / whatever..
  6. Run the newly created myApp / myApp.exe -> Unexepected result, something like: C:\Users\myApp.exe. The expected result is the global directory where NodeJS sits.

A proposed solution would be to explicitly search for node executable (like this library does with npm) instead of using process.execPath.

Pull Request