# 模块解包
从 2.5 版本起,炸毛框架的模块源码支持了打包和分发,分发后必不可少的一步就是将其解包。
解包过程大致为:
- 检查模块的配置文件是否正常。
- 检查模块的依赖问题,如果有依赖但未安装,则抛出异常。
- 检查 LightCache 轻量缓存是否需要写入。
- 检查
zm_data
是否有需要存入的数据。 - 合并
composer.json
文件。 - 拷贝
zm_data
相关的文件。 - 写入 LightCache 相关数据。
- 提示用户手动合并
global.php
全局配置文件。 - 拷贝模块 PHP 源文件。
# 解包命令
./zhamao module:unpack <module-name>
1
首先将待解包的 phar 文件放入 zm_data
目录下的 modules
文件夹(如果不存在需要手动创建),如果你手动修改过 global.php
下面的 module_loader.load_path
项,需要放入对应的目录。
放入后,结构如下:
zm_data/
zm_data/modules/
zm_data/modules/foo.phar
1
2
3
2
3
接下来,需要知道模块的名称。当然一般情况下,phar 的名称可以获取到模块的实际名称,如 foo
,但最好用 ./zhamao module:list
列出模块的信息来获取真实的模块名称。
./zhamao module:list
# 下面是输出
[foo]
类型: 模块包(phar)
位置: zm_data/modules/我是假的名字.phar
1
2
3
4
5
2
3
4
5
解包过程十分简单,只需要执行一次命令即可。
./zhamao module:unpack foo
# 下面是输出
[10:05:40] [I] Releasing source file: src/Module/Example/Hello.php
[10:05:40] [I] Releasing source file: src/Module/Example/zm.json
[10:05:40] [S] 解压完成!
1
2
3
4
5
2
3
4
5
# 命令参数
在解包时会遇到各种复杂的情况,如源码文件已存在、数据已存在、依赖问题等,通过增加参数可以控制解包时的行为。
# --overwrite-light-cache
含义:覆盖现有的 LightCache 键值(如果存在的话)。
# --overwrite-zm-data
含义:覆盖现有的 zm_data
下的文件(如果存在的话)。
# --overwrite-source
含义:覆盖现有的 PHP 模块源文件(如果存在的话)。
# --ignore-depends
含义:解包时忽略检查依赖。
# 常见问题
如果你解包的模块包要求修改 global.php
,则会出现类似这样的提示:
# ./zhamao module:unpack foo
[14:47:39] [W] 模块作者要求用户手动修改 global.php 配置文件中的项目:
[14:47:39] [W] *请把全局配置文件的light_cache项目中max_strlen选项调整为至少65536
请输入修改模式,y(使用vim修改)/e(自行使用其他编辑器修改后确认)/N(默认暂不修改):[y/e/N]
1
2
3
4
2
3
4
一般这种情况,根据第二条提示(第二条提示为打包时填入的 global-config-override
)。如果输入 y,则会自动执行命令 vim config/global.php
,如果输入的是 e,则会等待你手动修改完成文件,最后按回车完成修改。默认情况直接回车的话,会跳过此步骤,如果模块要求了修改但跳过修改,安装后可能会有功能缺失等问题。