如果你正在开发一个前端项目,那么你必须要用到 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 包包含的代码可以被正确转换。务必谨记使用 exclude
和 include
挑选需要转换的代码目录时,要慎重,根据具体的项目需求和场景选择合适的配置方案。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/645b5164968c7c53b0daa724