启用Bzlmod的Bazel 7.4:能否修改execRoot或_main仓库名称?
解决方案
1. 修改主仓库名称(替换_main)
在项目根目录的MODULE.bazel文件里,把module指令的name参数改成你之前的工作区名称即可:
module( name = "your_old_workspace_name", # 原有的version、compatibility等参数保留不变 )
改完重新运行Bazel构建,execRoot里的路径就会变成execroot/your_old_workspace_name/...,原来TS文件里<workspace_name>/APP_NAME/...格式的导入就能正常生效,不用修改任何业务文件。
2. 不修改仓库名的兼容方案
如果不想调整module名称,也可以通过TypeScript路径映射来兼容旧导入:
- 在项目的
tsconfig.json中添加路径映射配置:
{ "compilerOptions": { "paths": { "your_old_workspace_name/*": ["_main/*"] } } }
- 然后在Bazel的
ts_library规则中指定这个tsconfig文件,或者直接在规则内配置paths:
ts_library( name = "your_target_lib", srcs = glob(["**/*.ts"]), tsconfig = "//:tsconfig.json", # 也可以直接在这里写路径映射,不用依赖tsconfig # paths = {"your_old_workspace_name/*": ["_main/*"]}, )
关于execRoot完整路径的自定义
Bazel的execRoot路径是由内部缓存机制自动生成管理的,没办法直接自定义整个路径,但通过修改module名称替换掉路径里的_main部分,已经能解决你当前的导入失效问题。
内容的提问来源于stack exchange,提问作者Sajan
相关产品推荐
相关产品推荐

