【问题标题】:Using babel to transpile to es3 (safari compliant)使用 babel 转译为 es3(兼容 safari)
【发布时间】:2017-03-05 11:18:18
【问题描述】:

我是 babel 新手。

我是这样设置的:

.babelrc:

{
    "presets": ["es2015", "es2017"]
}

gulpfile:

gulp.task('default', function() {
    return gulp.src(['src/**/*.js', '!src/**/3rd/*'])
        .pipe(babel())
        .pipe(gulp.dest('dist'));
});

然而,这似乎正在编译为 Safari 不完全支持的 es5。

有没有办法设置目标?那么它可以编译成 ES3 吗?

【问题讨论】:

    标签: gulp babeljs


    【解决方案1】:

    不,Babel 不支持转译为 ES3。

    您的选择是:

    1. 编译成 ES5 然后使用ES5 shim

    2. 使用不同的转译器。 Google Closure CompilerTypeScript 都支持 ES6 作为输入和 ES3 作为输出。

    注意: Babel 生成的“ES5”代码可能不适用于所有浏览器,因为它可能包含 ES5 中不存在的功能(有关更多信息,请参阅caveats)。换句话说,由于您的目标是更旧的浏览器,因此您还需要 Babel polyfill 以及 ES5 shim。

    【讨论】:

    • 我做了 npm install --save-dev babel-polyfill 然后在我的 js 文件中我做了:import 'babel/polyfill'; 但是在我看到的转译文件中:'use strict'; require('babel/polyfill'); 当我将它粘贴到 jsfiddle.net 时,这显然不起作用 - 我获取require is not defiend - 你能帮我理解为什么它不能正确转译吗?
    • 这是一个单独的问题 - 简而言之,您需要一个模块加载器。我推荐this question,因为它非常全面地概述了您在这方面的选择。
    • 感谢法斯塔尼斯!但我以为 babel 没有提供模块加载器?
    • 很遗憾,没有。 Babel 只能将 ES6 模块(import 关键字)转换为另一个模块系统(例如 AMD 或 SystemJS)。
    猜你喜欢
    • 2019-10-20
    • 1970-01-01
    • 2015-07-04
    • 1970-01-01
    • 1970-01-01
    • 2022-10-17
    • 2020-02-28
    • 2019-02-16
    相关资源
    最近更新 更多