这是我的项目的结构
📦mainProject
┃
┣ 📂subProject1
┃ ┃
┃ ┗ 📜composer.json
┃
┗ 📂subProject2
┃
┗ 📜classINeed.php
我的
composer.json
{
"autoload": {
"classmap": ["../subProject2/classINeed.php"]
}
}
命令
composer dump-autoload
不会返回任何错误,但 subProject1/vendor/composer/autoload_classmap.php
没有预期的 classINeed.php
是否可以将 项目外文件添加到 composer 自动加载类映射?
{ "autoload": { "classmap": ["../subProject2/classINeed.php"] } }
是否可以将项目外文件添加到作曲家自动加载类映射中?
是的,要将项目外文件放入 Composer 自动加载类映射中,您可以在项目外(即在其自己的项目内)定义它,将其放在自己的自动加载器中,然后需要其他项目。
然后你就可以把它放在那里了。
subProject1/composer.json
{
"name": "main/sub-1",
"require": {
"main/sub-2": "1.0.0"
},
"scripts": {
"post-autoload-dump": [
"@php -r 'require __DIR__ . \"/vendor/autoload.php\"; var_dump(class_exists(\"Foo\"));'"
]
},
"repositories": {
"main/sub-2": {
"type": "path",
"url": "../subProject2",
"options": {
"versions": {
"main/sub-2": "1.0.0"
}
}
}
}
}
subProject2/composer.json
{
"name": "main/sub-2",
"description": "File I need",
"autoload": {
"classmap": ["classINeed.php"]
}
}
然后运行进去
subProject1
:
$ rm -rf vendor && composer install
Installing dependencies from lock file (including require-dev)
Verifying lock file contents can be installed on current platform.
Package operations: 1 install, 0 updates, 0 removals
- Installing main/sub-2 (1.0.0): Symlinking from ../subProject2
Generating autoload files
> @php -r 'require __DIR__ . "/vendor/autoload.php"; var_dump(class_exists("Foo"));'
Command line code:1:
bool(true)
非常感谢您的回答,但遗憾的是我在 subProject2 中没有作曲家
在这种情况下 - 虽然不推荐 - 当然可以在第一个项目中提供该composer.json作为路径。
因此其他项目一定不能有composer.json。这是
package
存储库。
这里有一个扩展变体,另外显示了它:
subProject1/composer.json
(subProject2/no-composer-json
有无composer.json
文件)
{
"name": "main/sub-1",
"require": {
"main/sub-2-no-composer-json": "1.0.0"
},
"scripts": {
"post-autoload-dump": [
"# this time autoloader test with composer only",
"classINeed::hasMagic__callStatic"
]
},
"repositories": {
"packagist.org": false,
"main/sub-2": {
"type": "path",
"url": "../subProject2",
"options": {
"versions": {
"main/sub-2": "1.0.0"
}
}
},
"main/sub-2-no-composer-json": {
"type": "package",
"package": {
"name": "main/sub-2-no-composer-json",
"version": "1.0.0",
"dist": {
"type": "path",
"url": "../subProject2/no-composer-json"
},
"autoload": {
"classmap": ["classINeed.php"]
}
}
}
}
}
示例运行:
$ composer install
Installing dependencies from lock file (including require-dev)
Verifying lock file contents can be installed on current platform.
Nothing to install, update or remove
Generating autoload files
> # this time autoloader test with composer only
> classINeed::hasMagic__callStatic
{
"name": "hasMagic__callStatic",
"argv": [
"object Event: post-autoload-dump"
]
}
Composer\Autoload\ClassLoader::addClassMap()
$loader = require PROJECT_DIR . '/vendor/autoload.php';
var_dump($loader->getClassMap());
$loader->addClassMap(['MyClass' => '/path/to/class.php']);
var_dump(new MyClass());