我会用一个例子问这个问题。 假设我有一个类似的项目目录。
project
vendor
samplevendor
src
composer.json
首先我想知道我是否已将composer.json文件正确放置在项目目录中以便在供应商目录中安装库?第二,假设我有以下几行composer.json
"autoload":{
"psr-0": {
"samplevendor\\package": "lib/"
}
}
那么composer会在哪里配置自动加载以查找关于项目根目录的类samplevendor \ package \ sampleclass? 在symfony2 composer.locked文件中看到以下行之后我问这个:
"autoload": {
"psr-0": {
"Doctrine\\Common\\Annotations\\": "lib/"
}
}
更新:我在autoload_namespaces.php中找到了相应的命名空间映射,它似乎与psr-0不一致:
'Doctrine \ Common \ Annotations \'=> array($ vendorDir。'/ doctrine / annotations / lib')
答案 0 :(得分:1)
您可能可以根据要求将composer.json
放在项目的任何位置,但对于纯PHP(和HTML / CSS / JS)项目,最好将文件放在最顶层的目录中。这样,如果你创建一个库或想要一些其他好的副作用,Composer就能找到它。 (其中有很多不会直接影响Composer或您的软件的工作方式)。
最好通过运行composer.json
来创建初始composer init
。 Composer会询问您有关供应商名称和软件名称的信息。我建议你在这里给出一个合理的答案。此外,您可以将自己添加为开发人员,立即添加一些依赖项(不一定需要),最后创建初始文件。
PSR-0自动加载意味着要在目录中搜索命名空间或类名的给定前缀(记住那些Underscore_Classname_Namespace_Emulation),即配置为\Namespace\Class
的名为"psr-0": {"Namespace\\": "src"}
的类将是位于src/Namespace/Class.php
(如果文件不在那里,也许另一个组件能够加载那个确切的类,因此自动加载不会立即失败 - Composer将注册该失败并查看以后的自动加载定义是否可以加载它)。
您在autoload_namespaces.php
文件中看到所需库的不同定义是正确的。 Composer必须从位于vendor
内的不同目录加载这些目录,并且您自己的类将从composer.json文件中自动加载部分中给出的位置自动加载。