【问题标题】:Babel and Bluebird promise巴别塔和蓝鸟的承诺
【发布时间】:2015-11-26 23:43:15
【问题描述】:

默认情况下,Babel 提出 Promise polyfill。如何强制它使用 Bluebird 实现或禁用 polyfill(我使用预设 es2015)。

很容易忘记导入 Bluebird 并意外使用 polyfill 实现。

【问题讨论】:

  • 我很困惑,是因为您将导入命名为Promise 很容易忘记,还是因为您将两者混淆了? Babel 只是使环境标准,如果你没有加载任何 polyfill 并且在已经有 Promise 的环境中运行代码,你会遇到同样的问题。这不是真正的 Babel 问题。
  • 考虑一种情况:我说的是let Promise = require('bluebird')。但是我的年轻同事只是忘记了这样做。现在他有一个 Promise 没有像 spread 这样的方法
  • 完全可以,但这是允许隐藏全局变量的副作用。我通常会有一条 linting 规则来禁止这种情况,如果需要,可以使用 let Bluebird = require('bluebird');。 Chrome、Firefox 和 Node >=0.11 都有一个全局的Promise,无论你是否使用 Babel,它都会在那里。您始终可以在应用程序开始时使用window.Promise = require('bluebird');,但随后您将依赖非标准行为和变异全局变量,这不是一个好主意。
  • 你的想法听起来很合理。谢谢。你是如何添加规则的?可以给个代码吗?

标签: node.js bluebird babeljs


【解决方案1】:

我猜这个预设应该可以解决这个问题: babel-preset-async-to-bluebird

正常安装后:

$ npm install --save-dev babel-preset-async-to-bluebird

以下使用 Node API 的代码将启用该预设:

require("babel-core").transform("code", {
  presets: ["async-to-bluebird"]
});

稍微改编自eknkc写的readme.md

【讨论】:

  • 您可能应该阅读 Your answer is in another castle: when is an answer not an answer? 以了解为什么这在所有 Stack Exchange 网站上都是如此重要的问题。
  • 嗨@PM2Ring。很高兴发送一些通用指南。但是,请阅读 Babel 和预设的概念。预设只是一组选项。答案就是设置这个预设
猜你喜欢
  • 1970-01-01
  • 2017-10-10
  • 2015-10-27
  • 2016-07-26
  • 1970-01-01
  • 1970-01-01
  • 2016-07-14
  • 2014-02-13
  • 2014-11-06
相关资源
最近更新 更多