title: Can I override ES6's Promise by bluebird's implementation in node's global scope?
body: <p>I want to use <a href="https://github.com/petkaantonov/bluebird" rel="noreferrer">bluebird</a>'s implementation of the <a href="https://promisesaplus.com/" rel="noreferrer">Promise/A+</a> open standard and override <a href="https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise" rel="noreferrer">native ES6 Promises</a>. I also want the bluebird implementation to be available everywhere in my subsequently imported modules without having to require it in every single one of them. Bluebird's <a href="http://bluebirdjs.com/docs/getting-started.html" rel="noreferrer">Getting started</a> page tells me to:</p>
  
  <pre><code>var Promise = require("bluebird");
  </code></pre>
  
  <p>, which results in overriding the native Promise element. Because bluebird is a superset of the spec, it will not break existing code and is thus supposed to be safe to use.</p>
  
  <p>However, because I know it's considered bad practice to:</p>
  
  <ol>
  <li>extend or replace language natives, and</li>
  <li>define globals for use in a require chain that depends on it</li>
  </ol>
  
  <p>, I'm wary when I want to include this in the base script of a node app:</p>
  
  <pre><code>import Promise from 'bluebird';
  global.Promise = Promise;
  </code></pre>
  
  <p>Is this a bad practice? Should I stick to importing bluebird in every single file?</p>