如何使用Babel-CLI实现多源路径转译并保留目录结构?
我懂你的痛点——想用babel-cli一次性转译多个指定目录,同时保留它们自身的层级结构,而不是把所有子文件直接平铺到dist里,还不想启动多个babel实例浪费资源对吧?下面给你几个实用的解决方案:
方案1:用--relative参数直接解决(最省心)
如果你的源目录是src/server和src/lib,想要转译后对应到dist/server和dist/lib,只需要在命令里加上--relative参数:
babel src/server src/lib -d dist --relative
这个参数会让babel把每个输入的源目录作为相对路径的根,自动在dist下创建对应的子目录,完美保留server和lib的层级结构,不用额外配置。
方案2:通过Babel配置精准控制(适合复杂项目)
如果你的项目里有很多需要排除的目录(比如something-irrelevant这类无关目录),或者想把转译规则固化下来,推荐在项目根目录创建babel.config.json(或.babelrc),明确指定要处理的路径:
{ "include": ["./src/server/**/*", "./src/lib/**/*"], "exclude": ["./something-irrelevant/**/*", "./more-such-things/**/*"] }
然后执行这条命令:
babel src -d dist
Babel会扫描src目录,但只转译include里指定的server和lib,自动保留它们的相对路径,最终输出到dist/server和dist/lib。
方案3:Shell路径扩展(类Unix系统专属小技巧)
在Linux或macOS下,还可以用Shell的花括号扩展简化命令,同时给路径加上末尾斜杠(让Babel明确识别为目录):
babel src/{server,lib}/ -d dist
这条命令等价于手动输入babel src/server/ src/lib/ -d dist,同样能让Babel在dist下生成对应的子目录结构。
另外要注意,确保你用的是babel-cli 7.x及以上版本,旧版本在多目录转译的路径处理上可能存在bug,可以通过babel --version检查并升级。
内容的提问来源于stack exchange,提问作者Zlatko

