坑:babel 7 的环境变量导致 ES6 module 转换失败

在前端开发中,我们经常使用 babel 来将 ES6+ 的代码转换成浏览器可以识别的 ES5 代码。然而,最近在使用 babel 7 进行转换时,遇到了一个坑点:环境变量导致 ES6 module 转换失败。

问题描述

在使用 babel 7 进行转换时,如果设置了 NODE_ENV 环境变量为 production,那么 babel 会默认将代码转换为 ES6 module 的形式。例如,下面的代码:

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

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

NODE_ENV 环境变量为 production 的情况下,会被转换成:

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

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

可以看到,babel 会将 ES6 module 的文件后缀 .js 加上。这个行为可能会导致一些问题。

问题原因

在浏览器中使用 ES6 module 时,如果文件后缀为 .js,浏览器会将其当作普通的 JavaScript 文件来处理,而不是 ES6 module。因此,如果 babel 将 ES6 module 转换成了 .js 后缀的形式,就会导致浏览器无法正确处理这些文件。

解决方案

解决这个问题的方法很简单,只需要在 babel 的配置文件中加入以下配置即可:

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

其中,extensions 指定了 babel 转换时支持的文件后缀名,将 .js 从后缀名列表中去掉即可。这样,babel 就不会将 ES6 module 转换成 .js 后缀的形式了。

总结

在使用 babel 7 进行转换时,一定要注意环境变量对 ES6 module 转换的影响。为了避免这个问题,可以在 babel 的配置文件中加入上述配置,确保 babel 不会将 ES6 module 转换成 .js 后缀的形式。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/660b87ffd10417a222bb2d70