web-dev-qa-db-ja.com

ノードのグローバルスコープでのbluebirdの実装によってES6のPromiseをオーバーライドできますか?

bluebirdPromise/A + オープンスタンダードの実装を使用し、 ネイティブES6 Promises をオーバーライドしたいと思います。また、bluebirdの実装を、その後インポートするモジュールのすべてで必要とせずに、どこでも利用できるようにしたいと思います。 Bluebirdの はじめに ページには次のように書かれています:

var Promise = require("bluebird");

、これにより、ネイティブのPromise要素がオーバーライドされます。 bluebirdは仕様のスーパーセットであるため、既存のコードを壊すことはなく、安全に使用できるはずです。

ただし、次のことは悪い習慣と見なされていることがわかっているためです。

  1. 言語ネイティブを拡張または置換し、
  2. それに依存するrequireチェーンで使用するグローバルを定義する

、ノードアプリのベーススクリプトにこれを含めたい場合は注意が必要です。

import Promise from 'bluebird';
global.Promise = Promise;

これは悪い習慣ですか?すべてのファイルにbluebirdをインポートすることに固執する必要がありますか?

21

私は過去4年間にコードでこれを何百回も行ってきたので、月間1,000万回のダウンロードの中には他にもたくさんあります。

ネイティブ実装をbluebirdと交換することが公式にサポートされています。

私がやります

const Promise = require("bluebird");

ファイルごとに。通常、APIを一度約束してから、通常はPromiseの呼び出しを回避できます。最大で.resolveを呼び出します。

17