Ecmascript 6 如何让Babel6编译成ES5JavaScript?

Ecmascript 6 如何让Babel6编译成ES5JavaScript?,ecmascript-6,babeljs,Ecmascript 6,Babeljs,我已经安装了babel的最新版本。目前为6.4.0。我创建了一个名为myclass.js的文件,其中包含以下代码 class MyClass { constructor(name) { console.log("I am a MyClass object .. ", name); } } var myclass = new MyClass('1234'); 创建类后,我在命令行中执行以下操作 $> babel ./src/myclass.js --out

我已经安装了babel的最新版本。目前为6.4.0。我创建了一个名为myclass.js的文件,其中包含以下代码

class MyClass {
    constructor(name) {
        console.log("I am a MyClass object .. ", name);
    }
}

var myclass = new MyClass('1234');
创建类后,我在命令行中执行以下操作

$> babel ./src/myclass.js --out-file ./out/app.js

我希望我的app.js文件具有es5编译的javascript,但它的代码与myclass.js文件的代码完全相同。我遗漏了什么可能导致这种情况?

您没有告诉巴贝尔以ES5为目标,而是选择了必要的预设/插件。例如,如果您使用
es2015
预设,这将把ES6代码编译成与ES5兼容的代码。您没有指定“目标”


下面的指南将指导您如何使用Babel将ES6代码转换为可以在支持ES的环境中运行的代码,Babel通常不以特定标准为目标(或者您通常不希望它以特定标准为目标),相反,它所做的是以您以某种方式传入的具体浏览器版本为目标—显式地像
“targets”:{“chrome”:70}
,或以不同的方式隐式地像
“targets”:“>0.25%”
(市场份额)—在配置文件(package.json、.babelrc或babel.config.js)中。为了使之成为可能,Babel从许多其他项目中获得了有关浏览器使用和功能支持的信息,如

然后,它尽可能地将代码转换为一组ECMA功能,这些功能的模拟实现由预设(插件组,比如
preset env
)定义。它最终会涉及到在您希望代码在其中运行的浏览器中可以运行什么

例如,如果你的目标浏览器的市场份额>15%,那么这个代码-
let a=5-将保持不变,因为这些流行浏览器很可能是最新版本的Chrome,完全支持
let
。另一方面,如果您表示也希望支持IE8,
let a=5变为
var a=5从现在起,巴贝尔试图使您的代码适合IE8,而IE8对
一窍不通。好吧,你明白了

另外,重要的是要了解,Babel不是一个银弹——它没有添加任何超出ECMAScript规范的内容。例如,它不为浏览器API提供多边形填充(
fetch
等)

如果你没有给出任何指示,那么,正如国家所说:

旁注,如果未指定目标,@babel/preset env将 默认情况下,转换所有ECMAScript 2015+代码。我们不建议以这种方式使用preset env,因为它没有利用其针对特定浏览器的能力


使用babel和nodejs(以及使用CLI)的确切答案:

安装巴别塔和预设 使用npx执行 注
全局安装babel cli时可能无法工作。因此,这是我的最终解决方案

您可以将@babel/preset env与Browserslist集成

遵循规则


通过这种方式,您可以针对您感兴趣的支持市场的一系列浏览器。

适用于我,您的
.babelrc
看起来如何?可能重复此答案虽然有有用的信息,但它并没有回答问题:它没有解释如何编译到ES5。我得到更正。显然,es2015预设是让巴贝尔产生es5兼容输出的方式。我一边想一边回答。是我一个人,还是命名混乱。ES2015=ES6所以他们为ES5创建了一个预设,为什么称之为“ES2015”@KoertvanKleef这些预设定义了可用的语言功能,因此这些就是这些名称所指的。(如果说应用程序使用ES6,
preset:ES5
?),你/巴贝尔怎么知道应用程序使用ES6?)因此
es2015
意味着你可以使用ES6功能,它们将被传输。@KoertvanKleef无需指定ES5的目标;预设基本上是要使用的插件列表,这些插件都自动针对ES5环境。:-)为什么这个答案不被接受?这比文件更清楚。文档从未提及.babelrc和预设步骤。这里是+1。
$ npm install babel-cli
npm install @babel/preset-env
{
  "presets": ["@babel/preset-env"]
}
$> babel ./src/myclass.js --out-file ./out/app.js
npm install babel-cli babel-preset-es2015
npx babel  ./src/myclass.js --out-file ./out/app.js --presets babel-preset-es2015