Babel 编译出现”Plugin/Preset files are not allowed to export objects, only functions.“错误,该怎么解决?

阅读时长 4 分钟读完

背景

Babel 是一个非常常用的编译工具,用来将 ES6 代码转换成 ES5 代码,从而实现不同版本浏览器的兼容性。但是在使用 Babel 进行编译时,可能会出现报错信息:“Plugin/Preset files are not allowed to export objects, only functions.” 这是由于 Babel 的更新导致的,很多老的插件和预设不再支持了。下面我们就来看一下如何解决这个问题。

原因

这个问题的根本原因在于 Babel 在 7.0.0 版本之后强制规定插件和预设必须导出一个函数,而不是一个对象。如果插件或预设导出了一个对象,那么 Babel 就会报错。这是为了避免新的插件和预设使用使用对象导出方式,从而导致代码的不稳定性。

解决方案

解决这个问题的方案很简单,只需要将对象导出方式改成函数导出方式即可。下面我们就以一个实例来说明。

假设你有以下的一个插件文件,里面导出的是一个对象。

如果你使用 Babel 将代码进行编译时,就会遇到这个错误。

要解决这个问题,只需要将模块导出改成函数导出即可。例如,将上面的代码改成下面的样子。

这样我们就改正了这个错误。如果你的代码中有很多导出对象的代码,可以使用下面的脚本来自动转换。

-- -------------------- ---- -------
----- ----------- - ----------------------------------------------------
----- ------------- - --------------------------------

-------------- - -------- --
  ------ --
  --------- ---------
-- -
  ------ -
    -------- -
      ------------------------------ -
        ----- ---- - ----------
        -- --------------------------------- -
          ----- ------ - -----------------
            ------------------------------------
            ---
          --
          ---------------- - -------
        -
      --
      ---------------------------- -
        ----- ---- - ----------
        -- --------------------------------- -
          ----- ------ - -----------------
            ------------------------------------
            ---
          --
          ---------------- - -------
        -
      --
    --
  --
--

这个脚本可以将所有导出对象的代码转换成导出函数的代码,从而解决这个问题。

总结

在使用 Babel 进行编译时,可能会遇到“Plugin/Preset files are not allowed to export objects, only functions.”的错误。这是由于 Babel 在 7.0.0 版本之后强制规定插件和预设必须导出一个函数,而不是一个对象。要解决这个问题,只需要将对象导出方式改成函数导出方式即可。如果代码中有很多导出对象的代码,可以使用脚本自动转换。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64b3c82448841e989400396c

纠错
反馈