Babel CLI 在管道输入时忽略配置
Babel CLI ignores configuration when input is piped
这可能是 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" ]
}
为什么要用管道?
对于它的价值,您可能想知道,"Why pipe input to Babel? Why not just use files?"
嗯,一方面,管道是受支持的功能,因此它应该 "just work."
但在我的例子中,传递给 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
文件。
这可能是 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" ]
}
为什么要用管道?
对于它的价值,您可能想知道,"Why pipe input to Babel? Why not just use files?"
嗯,一方面,管道是受支持的功能,因此它应该 "just work."
但在我的例子中,传递给 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
文件。