bogdanbeniaminb / simpledep
PHP 简单依赖求解器
1.0.6
2024-03-09 13:35 UTC
Requires
- php: >=7.4
- z4kn4fein/php-semver: ^2.0
README
这是一个简单的安装/卸载请求及其依赖项的求解器。
目的
此项目的目的是为内部市场等包管理工具提供简单的依赖树求解器。它并不打算成为一个像 Composer 或 NPM 这样的功能齐全的包管理器。
如何运行
主要类是 Solver 类。它的构造函数方法接受一个包含包的 Pool,一个请求集合 RequestsCollection 和一个已安装包的数组。`solve` 方法返回一个 Operation 对象数组。每个 Operation 对象都有一个 type 属性,可以是 `install` 或 `uninstall`,一个具有包名的 name 属性和一个具有包版本的 version 属性。
<?php $foo1 = (new Package('foo', '1.0.0'))->addLink('require', 'bar', '>=1.0.0'); $foo2 = (new Package('foo', '1.0.1'))->addLink('require', 'bar', '>=1.0.1'); $bar1 = (new Package('bar', '1.0.0'))->addLink('require', 'baz', '>=1.0.0'); $bar2 = (new Package('bar', '1.0.1'))->addLink('require', 'baz', '>=1.0.5'); $boo1 = (new Package('boo', '1.0.5')) ->addLink('conflict', 'bee', '>=1.0.0') ->addLink('replace', 'wow', '>=1.0.0'); $boo2 = (new Package('boo', '1.0.7')) ->addLink('conflict', 'bee', '>=1.0.0') ->addLink('replace', 'wow', '>=1.0.0'); $baz1 = new Package('baz', '1.0.0'); $baz2 = new Package('baz', '1.0.1'); $pool = (new Pool()) ->addPackage($foo1) ->addPackage($bar1) ->addPackage($boo1) ->addPackage($boo2) ->addPackage($baz1) ->addPackage($foo2) ->addPackage($bar2) ->addPackage($baz2); $requests = (new RequestsCollection()) ->install('foo', '>=1.0.0') ->update('boo') ->uninstall('bee'); $installed = [ 'boo' => [ 'version' => '1.0.0', ], 'bee' => [ 'version' => '1.0.0', ], ]; $solver = new Solver($pool, $requests, $installed); $solution = $solver->solve(); // print_r($solution); // Convert the solution to an array of arrays. $solutionArray = array_map( fn(Operation $operation) => $operation->toArray(), $solution ); echo (json_encode($solutionArray, JSON_PRETTY_PRINT));
上述代码将输出以下内容
{
"baz": {
"type": "install",
"name": "baz",
"version": "1.0.1",
"requiredBy": [{
"type": "install",
"name": "bar",
"version": "1.0.0"
},
{
"type": "install",
"name": "foo",
"version": "1.0.0"
}
]
},
"bar": {
"type": "install",
"name": "bar",
"version": "1.0.0",
"requiredBy": [{
"type": "install",
"name": "foo",
"version": "1.0.0"
}]
},
"foo": {
"type": "install",
"name": "foo",
"version": "1.0.0",
"requiredBy": []
},
"boo": {
"type": "install",
"name": "boo",
"version": "1.0.7",
"requiredBy": []
},
"bee": {
"type": "uninstall",
"name": "bee",
"version": null,
"requiredBy": [{
"type": "install",
"name": "boo",
"version": "1.0.7"
}]
}
}