1

.babelrc这可能是 Babel CLI 中的一个错误(我使用的是 6.24.1),但是当源数据通过管道传输到它时,Babel 似乎并不适用。


例子:

鉴于此源文件,foo.js

const foo = 10;

:这个命令做你认为应该做的事,.babelrc在同一个目录中,其中包含es2015预设:

babel foo.js --out-file foo.classic.js

这导致foo.classic.js,具有正确转译的内容:

"use strict";

var foo = 10;

坏:这个命令没有做你期望的事情:

cat foo.js | babel --out-file foo2.classic.js

这导致foo2.classic.js,内容不变

const foo = 10;

好:此命令符合您的预期,因此它不是错误的实际配置:

cat foo.js | babel --presets es2015 --out-file foo3.classic.js

结果foo3.classic.js

"use strict";

var foo = 10;

分析:在管道的情况下,Babel 显然是从管道中读取数据并将其传递出去(因为输出文件已创建),但 Babel.babelrc从管道获取数据时似乎完全忽略了。

作为参考,这.babelrc是应该应用的:

{
    "presets": [ "es2015" ]
}

为什么要使用管道?

对于它的价值,您可能想知道,“为什么将输入通过管道传输到 Babel?为什么不只使用文件?”

好吧,一方面,管道是受支持的功能,所以它应该“正常工作”。

但在我的例子中,传递给 Babel 的源文件本身就是代码生成链的结果,该链生成有效的 ES6 代码作为输出。最好不必让代码生成器输出一个~temp.js中间文件,然后再将其删除;如果管道按预期工作会好得多。


问题:

这是一个错误吗?如果是,有没有人知道比发出一个名为 的文件~temp.js,将其传递给 Babel,然后删除它更好的解决方法?

4

1 回答 1

1

这是当前预期的行为,但我们已经在https://github.com/babel/babel/pull/5384中讨论了一些替代方案。

有关一些信息,请参阅我的评论。如那里所述,您当前的解决方法是

cat foo.js | babel --filename foo.js --out-file foo2.classic.js

告诉 Babel 文件名,这样它就知道在哪里搜索.babelrc文件。

于 2017-06-07T16:32:48.747 回答