我可以通过bluebird在节点全局范围内的实现来覆盖ES6的Promise吗?

Chr*_*ois 21 javascript overriding node.js promise bluebird

我想使用bluebird实现Promise/A +开放标准并覆盖原生ES6 Promises.我还希望bluebird实现在我随后导入的模块中随处可用,而不必在每个模块中都需要它.Bluebird的入门页面告诉我:

var Promise = require("bluebird");
Run Code Online (Sandbox Code Playgroud)

,这会导致覆盖本机Promise元素.因为bluebird是规范的超集,所以它不会破坏现有代码,因此应该是安全的.

但是,因为我知道这被认为是不好的做法:

  1. 扩展或替换语言本地人,和
  2. 定义全局变量以在依赖于它的需求链中使用

当我想在节点应用程序的基本脚本中包含它时,我很谨慎:

import Promise from 'bluebird';
global.Promise = Promise;
Run Code Online (Sandbox Code Playgroud)

这是一种不好的做法吗?我应该坚持在每个文件中导入bluebird吗?

Ben*_*aum 17

在过去的4年中,我已经在我的代码中完成了数百次,因此在每月1000万次下载中有很多其他的.

官方支持将本机实现与bluebird交换.

我做

const Promise = require("bluebird");
Run Code Online (Sandbox Code Playgroud)

在每个文件的基础上.请注意,通常您可以一次性宣传您的API,然后通常避免调用Promise- 最多调用.resolve.