使用App::Mi6上传模块至Zef时遇"No single root directory found"错误求助
解决App::Mi6上传Zef时的"No single root directory found"错误
错误原因
Fez(Zef生态系统的上传工具)要求模块压缩包必须满足解压后只有一个根目录——所有文件必须放在模块名-版本号的文件夹下,不能直接将文件暴露在压缩包根层级。
解决步骤
1. 检查压缩包结构
先确认生成的tar.gz是否符合要求,执行命令查看结构:
tar -tf Directory-0.0.1.tar.gz
如果输出的文件路径没有统一的Directory-0.0.1/前缀(比如直接显示META6.json、lib/Directory.rakumod),说明打包结构错误。
2. 修复mi6打包配置
- 检查项目根目录的
.gitignore或mi6.toml,确保没有误将项目根文件夹排除在打包范围外。 - 执行
mi6 dist重新生成压缩包,再次用上述命令验证结构是否正确。
3. 手动重新打包(临时方案)
如果自动打包仍有问题,手动构建符合要求的压缩包:
# 创建根目录 mkdir Directory-0.0.1 # 复制必要文件到根目录下 cp -r lib/ META6.json README.md LICENSE Directory-0.0.1/ # 打包 tar -czf Directory-0.0.1.tar.gz Directory-0.0.1/
之后用Fez手动上传:
fez upload Directory-0.0.1.tar.gz
4. 更新App::Mi6
你当前使用的mi6版本可能存在打包bug,更新到最新版本再尝试:
zef update App::Mi6
更新完成后重新执行mi6 release。
5. 验证项目基础结构
确保你的项目遵循标准Raku模块结构:
你的项目目录/ ├── lib/ │ └── [你的模块文件].rakumod ├── META6.json ├── README.md └── LICENSE(可选)
内容的提问来源于stack exchange,提问作者StevieD
相关产品推荐
相关产品推荐

