你今天如何在前端使用es6承诺?

时间:2016-08-26 11:28:26

标签: javascript ecmascript-6 es6-promise

我试图使用babel来编译包含es6 promises的文件。我已经安装了babel-cli,babel-preset-es2015,babel-plugin-es6-promise。

我的.babelrc配置是:

{
  "presets": ["es2015"],
  "plugins": ["es6-promise"]
}

我在里面用require()编译了js文件,但我根本不想使用require。

今天是否有可能在前端使用es6承诺而不需要js?

请提供任何链接到es6 promises实施样本与babel(或甚至与babel + require,因为我不能要求js工作)

ps:不要使用网络包。

3 个答案:

答案 0 :(得分:4)

  

今天是否有可能在前端使用es6 promises而不需要js?

在最新的Chrome / Firefox / Safari / Edge中,Promise为already supported natively

如果您正在寻找旧的浏览器支持,没有Babel的简单方法就是使用polyfill库。

以下是具有spec:

指定的确切行为的库

以下是一些额外的自定义行为:

当然,上面只是一些比较流行的,但是你可以通过研究找到很多其他的。

如果您确实想要使用其他ES6功能,特别是在旧版浏览器上,您可以继续添加polyfill,但在这一点上,使用Babel及其env preset可能会更容易,面向未来。 / p>

  

请提供任何链接到es6 promises实施样本与babel(或甚至与babel + require,因为我不能要求js工作)

babel website's setup描述了如何在您能想到的任何环境中使用它。如果webpack太重而无法满足您的需求,我建议您using gulp,这里是thorough guide on how

答案 1 :(得分:2)

Babel本身只是一个转换器,它从ES6转换为ES5,没有别的。由于ES6包含模块,可用于以下导入:

import Awesome from './Awesome'

Babel会将这些内容转换为require语句,但不关心实际需求。因此,您需要任何实现AMD样式要求的框架,如Browserify或类似的东西。 Webpack也会处理它,因此如果您使用Webpack + Babel,所有必需的代码都将可用,并且您无法通过新的import语句使用ES6模块(以及Promises)。 / p>

我正在使用这样的webpack.config.js

module.exports = {
    entry: ['babel-polyfill', './js/main.js'],
    output: {
        path: './bin/js',
        filename: 'main.js',
    },

    devtool: 'source-map',

    module: {
        loaders: [{
            test: /\.js$/,
            exclude: /node_modules/,
            loader: 'babel-loader'
    }]
  }
}

.babelrc之类的:

{ 
    "presets": [ "es2015", "stage-3" ],
    "plugins": [
        "external-helpers",
        "transform-async-to-generator",
        "transform-runtime"
    ]
}

在我开始使用Webpack之前,我使用了Gulp和browserify,首先编译而不是捆绑,但是使用webpack进行设置要简单得多,所以我决定使用它......

答案 2 :(得分:-4)

Webpack + babel - 前面。 node.js 5+版本/ babel-register for node.js