2016-12-14 18:08:08 3493次浏览 2条回答 0 悬赏 10 金钱

yii2在项目根目录使用composer安装扩展的时候会自动安装到核心框架的文件里面
请问怎么直接安装到某个app里面?
如果可以直接安装到app里面,所安装的扩展的依赖组件又是如何处理安装的?
尝试过在backend文件夹下直接执行安装扩展的命令,但是会自动创建一个核心文件的文件夹,除了依赖组件外还讲yii2的核心框架在backend下又安装了一遍。
请大神解惑...

最佳答案

  • 飘逸 发布于 2016-12-14 19:03 举报

    首先声明一下,我不是冲着你特意写在标题中的(10分赏金)来的。O(∩_∩)O哈哈~

    在composer管理的项目里面,代码应该被分成两部分。一部分是自己写的,包括安装Yii高级或者基础版所默认提供的应用脚手架。另一部分就是那些第三方的包,说白了就是vendor目录。然后依靠composer提供的自动加载机制去使用那些包,于是你在index.php里发现了这么一句话

    require(__DIR__ . '/../vendor/autoload.php');  
    

    所以如果你想用composer管理你的项目依赖,包便不可以安装到你指定的APP下,因为那会再造就一个项目,而且是和原有项目毫不相关的一堆文件。
    其实在composer眼里,一个composer.json就是一个包,就是一个项目。而你项目的composer.json已经在项目根目录下存在了。

    其实composer 中文文档会解决你所有的疑惑,并且这是唯一正统的光明之道。

    1 条回复
    回复于 2016-12-14 20:35 回复

    首先感谢你的回答!赏金不是重点。
    composer工具也是学习yii2的时候才了解到的,接触不深,虽然有很多资料资源,但是有一些术语定义理解起来还是比较吃力甚至还是不懂。
    感谢你的回答,虽然还是听得迷迷糊糊(不是讲的不清楚,理解能力有限)。现在可能更清楚的一点是,composer只是一个代码迁移工具,是依据一定规则进行代码迁移的。我所说的想法可能同composer就不能实现了,只能通过composer引入后,讲代码手动移植到自己的项目中。
    上次这么干过一次,但是扩展文档中让配置别名,在独立的app中怎么配都不成功,必须配置在common中,后来才发现,使用composer引入扩展后,会自动更新yii下的extensions.php,在这里配置了别名。
    最后想追问一下,autoload机制我还不是很懂,能不能大白话的指点一二

  • 回答于 2016-12-15 11:03 举报

    我也没有研究过Yii和composer各自的自动加载实现的过程,但他们必定遵循着一种规范,他就是 psr-4,这个链接会给你很大的帮助的。

    另外,composer其实更准确来说称其为依赖管理工具较好,你所敲下的Yii代码实际上是依赖于 /vendor/yiisoft/ 下的各种包的。而当然,他们会依赖于其他各种包。为妥善管理这些依赖关系,composer就诞生了。
    所以说,composer其实是比yii “大” 的,因为在composer的眼中,yii仅仅只是万千包中的一个。更别说其下的一个小小的extension.php文件了。那个文件应该是为了yii本身某些特别的需要,和composer自动加载没有关系的。

    当你引入一个第三方包的时候,如果它提供了composer安装的方式,那他在被composer正确安装的时候,便已实现了自动加载而无需你做任何事的。

    1 条回复
    回复于 2016-12-15 11:41 回复

    感谢你的解答

    觉得很赞
您需要登录后才可以回答。登录 | 立即注册
zone_g@163.com
见习主管

zone_g@163.com

注册时间:2015-04-11
最后登录:2019-05-25
在线时长:10小时22分
  • 粉丝2
  • 金钱174
  • 威望10
  • 积分374

热门问题