Babel 配置 exclude 不会处理 node_modules

阅读时长 3 分钟读完

如果你正在开发一个前端项目,那么你必须要用到 Babel,这个工具可以将 ES6 或者以上的 JavaScript 代码转为浏览器兼容的代码。Babel 可以减少我们在编写 JavaScript 时的兼容性烦恼, 并且它的配置非常灵活,可以通过配置文件 .babelrc 来对转换过程进行定制处理。但是在某些情况下,关于 exclude 的配置会给我们带来预料之外的体验,尤其是当我们处理 node_modules 时。

exclude 是什么?

在讲解 exclude 之前,我们先来看一下 Babel 配置中的 include,它决定哪些文件将被 Babel 转换。 这些转换通常仅仅针对项目自己的代码,而不是针对其他第三方库的代码。而这个第三方库的代码通常会被放在 node_modules 目录下。使用 exclude 可以防止 Babel 转换 node_modules 中的代码,加快 Babel 转换速度,同时防止发生与第三方库的冲突。

exclude 的配置

在 Babel 配置文件 .babelrc 中,我们可以通过 exclude 选项配置不想被转换的代码。默认情况下,Babel 会对项目目录下的文件进行转换(不包括 node_modules 目录下的文件),如果你想排除某些目录或者文件,可以通过以下方式配置:

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

最开始大多数人都会使用默认的配置,但是,当我们在引入某些第三方库时,Babel 反而会去把它们转换,这就会导致一些问题,比如:Babel 迭代的时间会变长,而且也可能出现一些莫名其妙的错误。

让我们来看一个具体的例子,在这个例子中,我们可以看到如何将 node_modules 目录完全排除在 Babel 的处理范围之外:

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

排除 node_modules 并不总是明智的选择

然而,在有些情况下,把 node_modules 完全排除在 Babel 的处理范围之外并不总是个好的选择,尤其是当你的程序依赖某些 npm 包,而这些包不使用 UMD 头或者不包含任何浏览器无法理解的内容,这时候你就需要 Babel 处理这些 npm 包了。

当需要在 node_modules 目录下执行 Babel 时,我们也需要使用 include 配置项来指定那些包需要转换,而不是把整个 node_modules 目录都包括:

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

总结

在使用 Babel 时, exclude 配置选项有助于我们快速地把第三方库排除在转换范围之外,尤其是 node_modules 目录。但是,在一些情况下,我们需要手动配置 include,来确保一些 npm 包包含的代码可以被正确转换。务必谨记使用 excludeinclude 挑选需要转换的代码目录时,要慎重,根据具体的项目需求和场景选择合适的配置方案。

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

纠错
反馈