我将用一个例子来问这个问题。假设我有一个项目目录,如下所示。
project
vendor
samplevendor
src
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\Annotation\‘=>数组(’Doctrine\Common\Annotation\‘注释数组(’Doctrine\Common\Annotation\‘’Doctrine\Common\Annotation\‘‘/主义/注释/lib’)
发布于 2014-02-18 08:04:07
您可以根据需要将composer.json放在项目中的任何位置,但对于纯composer.json(和HTML/CSS/JS)项目,最好将文件放在最上面的目录中。这样,如果你创建了一个库或者想要一些其他好的副作用,Composer将能够找到它。(它们中有很多不会直接影响Composer或您的软件的工作方式)。
通过运行composer init来创建初始composer.json是一个好主意。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文件的autoload部分中给定的位置自动加载。
https://stackoverflow.com/questions/21824740
复制相似问题