这可能是Babel CLI中的错误(我使用的是6.24.1),但是在将源数据通过管道传输到它时,Babel似乎不应用.babelrc



例:

给定此源文件,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然后删除它更好的解决方法吗?

最佳答案

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

有关某些信息,请参见my comment here。如此处所述,当前的解决方法是

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


告诉Babel文件名,因此它知道在哪里搜索.babelrc文件。

关于javascript - 当输入管道时,Babel CLI将忽略配置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44413105/

10-15 07:59