我babel/register在两个本地npm包之间出现了冲突.
在一个包中,我正在做以下事情:
require('babel/register');
require('index');
Run Code Online (Sandbox Code Playgroud)
并在同一个包的索引文件中:
require('test');
Run Code Online (Sandbox Code Playgroud)
并在"测试"包中:
require('babel/register');
require('test/index');
Run Code Online (Sandbox Code Playgroud)
这会引发以下错误:
throw new Error("only one instance of babel/polyfill is allowed");
但是,如果我babel/register从"test"包中取出该行,我会index在"test"包的文件中收到以下错误:
import fs from 'fs';
^^^^^^
SyntaxError: Unexpected reserved word
Run Code Online (Sandbox Code Playgroud)
我也尝试使用System.import导入"test"包(使用BabelJS网站上指定的polyfill),但在这种情况下,我得到与上面相同的错误.我应该如何将一个包导入另一个包并保留使用ES6导入/导出和其他ES6功能的能力?
编辑:我已经简化了一点,我仍然需要"测试"到第一个包,但我没有加载中间文件.相反,"test"的"主"文件设置为test/index.理论,现在它只是加载一个ES6模块,它应该能够注册.我仍然得到上述错误.
正如您所看到的,babel/register每个应用程序仅运行一次,通常这将是您正在启动的顶级应用程序。
您面临的问题是,默认情况下,require('babel/register')只会将系统设置为直接在模块内转译文件,而不会处理node_modules. 通常期望node_modules在发布到模块注册表时提前编译任何内容。
ignore: false一种选择是作为选项传递,require('babel/register')({ignore: false});例如,但这通常是一个坏主意,并且可能导致其他问题。这将使 Babel 转译所有文件,但这并不总是安全的事情,因为并非所有 JavaScript 代码都保证是有效的 ES6 模块。
最好的解决方案是test提前转译你的模块。但是,如果这不起作用,您可以使用该only选项为应转译的路径指定正则表达式或 glob。
| 归档时间: |
|
| 查看次数: |
4842 次 |
| 最近记录: |