Babel配置合并选项中的exclude属性无法生效该如何解决?
Babel exclude 配置不生效的常见原因及修复方案
1. 正则表达式写法错误
你使用的"/\\.js$/"是带斜杠包裹的字符串格式,Babel不会自动将这类字符串识别为正则表达式,JSON格式的配置中需要去掉前后的斜杠,仅保留正则匹配逻辑:
// 错误写法 "exclude": ["/\\.js$/"] // 正确写法 "exclude": ["\\.js$"]
如果使用JS格式的Babel配置(如babel.config.js),可以直接写正则字面量:
exclude: [/\.js$/]
2. 路径匹配规则问题
Babel的路径匹配是基于执行babel命令的当前工作目录的绝对路径匹配,不是相对于配置文件所在目录:
- 你写的
"./codefile.js"和"codefile.js"只会匹配当前工作目录下直接存在的codefile.js,如果目标文件在subPackage目录下,就无法匹配成功 - 要匹配任意层级下的对应文件可以写:
"exclude": ["**/codefile.js", "./subPackage/codefile.js"]
3. 直接指定单文件编译时exclude会被忽略
你执行babel index.js --out-dir compiled_indexDir时,是主动指定了要编译index.js文件,Babel会跳过全局的include/exclude校验,直接编译你指定的文件。这种场景要让exclude生效,不能直接指定单个文件,改为指定目录配合过滤规则即可:
# 错误写法,直接指定文件会忽略exclude配置 babel index.js --out-dir compiled_indexDir # 正确写法 babel ./ --out-dir compiled_indexDir --exclude "index.js"
4. .babelrc.json的作用域限制
.babelrc.json默认仅作用于它所在目录及子目录下的文件,如果执行命令的目录和.babelrc.json所在目录不一致,或者要排除的文件不在它的作用域范围内,配置就不会生效。全局配置推荐使用放在项目根目录的babel.config.json,作用域覆盖整个项目。
内容的提问来源于stack exchange,提问作者Saar Seri
相关产品推荐
相关产品推荐

