Composer无内置离线阅览包导出功能,需组合phpdoc生成HTML文档与composer archive打包源码,并手动合并目录、解决路径/编码/协议限制问题。

Composer 本身不提供“离线阅览包”的导出功能,也没有内置的 export 或 archive 命令来生成带文档/源码浏览界面的离线包。 所谓“离线阅览”,实际是开发者自行组合工具达成的效果——核心在于导出可本地打开的文档(如 PHPDoc 生成的 HTML)+ 可离线加载的依赖源码 + 合理组织目录结构。
为什么 composer install --no-dev 不等于离线阅览包
很多人误以为用 composer install --no-dev + vendor/ 目录就是“离线包”,但这只解决了代码依赖的本地存在,并不包含可浏览的 API 文档、函数跳转、类索引等阅览能力。真正离线“阅览”,需要额外生成静态文档站点。
-
vendor/是运行时依赖,不是文档载体 - PHPDoc、Doxygen 等工具才负责把注释转成 HTML 页面
- Composer 的
dump-autoload只生成自动加载映射,不生成任何 UI - 官方不打包文档,因为包作者是否写 docblock、是否提交
@package标签完全不可控
用 phpdoc + composer archive 拼出离线包
最贴近需求的实操路径是:先用 phpdoc 扫描 vendor/(或指定包)生成 HTML 文档,再用 composer archive 打包源码,最后合并为一个可双击打开的文件夹。
- 安装
phpdocumentor/phpdocumentor:运行composer global require phpdocumentor/phpdocumentor - 生成全 vendor 文档(较慢,建议限定范围):
phpdoc -d vendor/myvendor/mypackage -t docs/mypackage - 若要打包源码本身(不含
vendor/下的 Git 元数据):composer archive --format=zip --dir=dist/ myvendor/mypackage - 手动合并:
cp -r docs/mypackage dist/mypackage-docs,然后在dist/下放一个index.html导航页 - 注意:
phpdoc默认不解析vendor/中未声明autoload.files的包,需加--parseprivate参数才能看到私有方法
常见坑:文档打不开、类名乱码、跳转失效
生成的 HTML 在离线双击打开时,90% 的问题来自路径和协议限制,不是生成逻辑出错。
- 浏览器直接双击
file://打开时,XMLHttpRequest被禁用 → 搜索/侧边栏动态加载失败 → 改用本地 HTTP 服务:php -S localhost:8000 -t docs/ - 中文类名或注释显示为方块 → 确保
phpdoc运行时终端编码为 UTF-8,且模板使用--template=clean(默认responsive模板对中文支持更稳) - 点击类跳转 404 →
phpdoc默认生成相对路径,但离线模式下需确保所有 HTML 文件在同一层级;避免用--force覆盖旧输出,否则缓存的.htaccess或重定向规则可能残留 -
composer archive不包含composer.json和README.md→ 需手动复制,否则离线时无法查看包说明和版本约束
真正麻烦的不是生成动作,而是“哪些包值得导出”和“文档完整性判断”——没有 @var、@param 的包,生成的页面基本只剩类名列表;而 Laravel、Symfony 这类重度注释项目,才能导出接近 IDE 的体验。别指望一键搞定,得按需筛选、分批处理、手动校验链接。











