冲突使用babel / register
我有两个本地NPM包之间似乎是babel/register
的冲突。
在一个包中,我正在做以下工作:
require('babel/register'); require('index');
而在同一个包的索引文件中:
require('test');
而在“testing”包中:
require('babel/register'); require('test/index');
这会引发以下错误:
throw new Error("only one instance of babel/polyfill is allowed");
但是,如果我将babel/register
行从“test”包中取出,“test”包的index
文件中会出现以下错误:
import fs from 'fs'; ^^^^^^ SyntaxError: Unexpected reserved word
我曾尝试使用System.import
导入“testing”包(使用BabelJS站点上指定的填充),但在这种情况下,我得到了与上述相同的错误。 我应该如何导入一个包到另一个,并保留使用ES6导入/导出和其他ES6function的能力?
编辑:我简化了这一点,我仍然要求“testing”到第一个包,但我不加载中介文件。 相反,“testing”的“主”文件被设置为test/index.
理论上,现在只是加载一个应该可以注册的ES6模块,我仍然会得到上述错误。
正如你所看到的, babel/register
只能在每个应用程序中运行一次,而且通常这将是您开始的顶级应用程序。
您面临的问题是,默认情况下, require('babel/register')
只会将您的系统设置为直接在模块内部传输文件,而不会处理node_modules
。 一般期望在发布到模块registry之前, node_modules
中的任何内容node_modules
将被提前编译。
一个选项是通过ignore: false
作为选项,例如require('babel/register')({ignore: false});
然而,这通常是一个坏主意,可能会导致其他问题。 这将使Babel转储所有的文件,但这并不总是一件安全的事情,因为并不是所有的JavaScript代码都是有效的ES6模块。
最好的解决scheme是提前将您的test
模块进行传输。 如果这不起作用,那么可以使用only
选项为应该被转发的path指定一个正则expression式或者glob。
在我的情况下,我摆脱了设置:
self._babelPolyfill = false;
我不知道是否第二次设置polyfill会导致一些微妙的问题,但是通过大量的unit testing,我没有看到使用这个黑客程序来避免脚本窒息的问题。
错误: only one instance of babel/polyfill is allowed
polyfill的only one instance of babel/polyfill is allowed
就是@loganfsmyth提到的:多个polyfill,可以同时使用babel-node
和./register-babel
。
但是,在我的情况下,这个错误奇怪, 直到我有另一个错误才显示出来。 我的意思是,一切正常,然后我有一个EADDRINUSE
错误。 当它发生时,它被遮住了,出现了填充错误。 很奇怪。 我在任何与巴别有关的地方都没有碰到我的代码。
一旦我固定了EADDRINUSE
, EADDRINUSE
出现了,我能够解决所有问题。
- 巴贝尔可以编译为“node –harmony”而不是ES5吗?
- 摩卡返回“callback不是一个函数”asynchronous调用
- 使用node-inspector或babel-node-debugdebugginges6传输的代码
- RollupJS`解决失败:错误:无法find模块'babel-runtime'`
- Babel编译错误:找不到模块core-js / library / fn / get-iterator
- Babelify在从node_modules导入模块时抛出ParseError
- 自动脚本转换js到jsx在反应的应用程序
- 将“gulp transpile”JavaScript文件反转为原始文件
- 与Webpack和Babel一起使用Benchmarkjs