title: Can/should we use/require node_modules included by my dependencies' node_modules?
body: <p><strong>Scenario</strong>:<br>
  <em>Imagine</em> you are building a web application using a framework such as <code>hapi</code> and you <em>know</em> that when you <code>npm install hapi --save</code> it installs several "<em>utilities</em>" in <em>it's</em> <a href="https://github.com/hapijs/hapi/blob/master/package.json#L20" rel="nofollow noreferrer"><code>node_modules</code></a> (<em>e.g</em>: <a href="https://www.npmjs.com/package/boom" rel="nofollow noreferrer"><code>boom</code></a>, <a href="https://www.npmjs.com/package/joi" rel="nofollow noreferrer"><code>joi</code></a>, <a href="https://www.npmjs.com/package/hoek" rel="nofollow noreferrer"><code>hoek</code></a>, <em>etc</em>.)</p>
  
  <p><strong>Question</strong>:<br>
  Can we avoid <em>explicitly re-installing</em> <code>Joi</code> in the project and use the module included in <strong><code>my_app/node_modules/hapi/node_modules/joi/lib/</code></strong> e.g: in my <code>server.js</code> file:</p>
  
  <pre><code>var Hapi = require('hapi'); 
  var Joi = require('./node_modules/hapi/node_modules/joi/lib/'); // good or bad idea? Why?
  
  var server = new Hapi.Server();
  server.connection({ port: 3000 });
  
  server.route({
      method: 'GET',
      path: '/{name*}',
      config: {
          validate: {  // validate using Joi
            params: { 
              name: Joi.string().max(40).min(2).alphanum()
            } 
          },
          handler: function (req,reply) {
              reply('Hello '+ req.params.name + '!');
          }
      }
  });
  
  server.start(function() {
      console.log('Now Visit: http://localhost:3000/YOUR_NAME_HERE')
  });
  </code></pre>
  
  <p>While the idea of not installing the same <code>node_modules</code> multiple times appears logical on the <em>surface</em> we would like to know the <em>real</em> world pitfalls of doing this?</p>
  
  <p>The clear advantage is that when you <em>update</em> your dependency on <code>Hapi</code> you will also get all the latest versions of its' <code>dependencies</code> the potential <em>downside</em> is that you won't know when there's a <em>breaking change</em> in one of those <code>dependencies</code> ... what <em>else</em>...?</p>
  
  <blockquote>
    <p>Note: I/we do not currently do this in any of our Node.js code, but someone asked me <strong><em>why not?</em></strong> today and I did not have a <em>comprehensive answer for them...</em>
    "<em>Because it's bad practice...</em>" is not a good answer, we want to <em>understand</em> <strong><em>why</em></strong>... not have the <a href="https://skeptics.stackexchange.com/questions/6828/was-the-experiment-with-five-monkeys-a-ladder-a-banana-and-a-water-spray-condu"><em>4 monkeys in a room</em> "<em>reason</em>"</a></p>
  </blockquote>