`require('phantomjs').path` resolves to the compiled `phantomjs` binary (phantomjs is written in c++) that is native the platform on which you perform `npm install phantomjs`.

`node_modules/phantomjs/bin/` contains a "binary", though it is really just a javascript file missing the `.js` extension. This file is the same regardless of what platform you're on. `node_modules/phantomjs/bin/phantomjs` is the file that is executed by node when you run `phantomjs` in a terminal, though this file just turns around and executes the binary located at `require('phantomjs').path`.

On unix at least, the files located in `node_modules/phantomjs/bin/` and `node_modules/phantomjs/lib/phantom/bin/` have the same name (`phantomjs`), which is perhaps the cause of your confusion.