title: Accessing a node.js global module
body: <p>The npm documentation says this:</p>
  
  <blockquote>
    <ul>
    <li>If you’re installing something that you want to use in your program, using
    require('whatever'), then install it locally, at the root of your project.</li>
    <li>If you’re installing something that you want to use in your shell, on the command line or 
    something, install it globally, so that its binaries end up in your PATH environment variable.</li>
    </ul>
  </blockquote>
  
  <p>I am currently writing --- or, at least, trying to write --- a genuine command line program in node that's intended to be used from the shell. Therefore, according to the above, my dependencies should be installed as global modules.</p>
  
  <p>How do I actually <em>use</em> a global module installed with npm in node? Calling <code>require()</code> doesn't work, of course, because the npm global module directory (<code>/usr/local/lib/node_modules</code>) isn't on the path by default. I can make it working by explicitly adding it to the path at the top of my program, but that's a really lousy solution because it's not portable --- it requires knowledge of where the npm's global module directory is on any given system.</p>
  
  <p>Just to make life even more aggravating, I have some global modules installed via dpkg. These have been put in <code>/usr/lib/nodejs</code>, and they just work. This confuses me, because if global modules aren't supposed to be used for ordinary applications I would expect neither to be on the path; or else I would expect them both to be on the path and requiring global modules to just work everywhere. Having one but not the other seems very odd. What's going on here?</p>
  
  <p><b>Update:</b> I should point out that this program is just a script, with <code>#!/usr/bin/env nodejs</code> at the top; it's not a formal node module, which is way overkill for something quite this trivial. As the Debian modules are all requireable from such a script, it seems sensible to me that npm's global modules should be requireable too, but I have a feeling that this is a Debianism...</p>