【问题标题】:How do I install a package to a custom path for my framework?如何将包安装到我的框架的自定义路径?
【发布时间】:2015-07-23 11:23:51
【问题描述】:

我正在使用 composer 版本 1.0-dev

我读过https://getcomposer.org/doc/faqs/how-do-i-install-a-package-to-a-custom-path-for-my-framework.mdhttps://github.com/composer/installershave

我在 bitbucket 中有一个带有这个简单 composer.json 的自定义模块:

{
    "name": "mybitbucketuser/base",
    "type": "puppet-module",
    "require": {
        "composer/installers": "~1.0"
    }
}

在我的主项目中,我有这个 composer.json:

{
    "minimum-stability": "stable",
    "repositories": [
        {
            "type": "vcs",
            "url": "https://bitbucket.org/mybitbucketuser/fluzu-base.git"
        }
    ],
    "require": {
        "mybitbucketuser/base": "*"
    },
    "extra": {
        "installer-paths": {
            "modules/{$name}/": ["mybitbucketuser/base"]
        }
    }
}

我也试过这个:

"extra": {
    "installer-paths": {
        "modules/{$name}/": ["type:puppet-module"]
    }
}

似乎一切正常,但 composer 将模块安装在默认的 vendor 目录中,而不是 modules 目录中。

怎么了?谢谢。

顺便说一句,我使用的是 puppet-module 类型,但实际上是 phalcon 模块。

【问题讨论】:

  • 到目前为止看起来并没有错,它甚至应该在没有 extra 部分的情况下工作,因为类型设置为 puppet-module。您是否尝试完全删除供应商文件夹? rm -rf vendor/ 然后重新安装所有依赖项composer update -v?这有时对我有帮助。
  • 我不止一次做了rm composer.lockrm -rf vendor/

标签: php composer-php


【解决方案1】:

我刚刚做了一个测试,它成功了。这是一个简单的示例,其中hello-world 是一个包,hello-world-test 需要该包。

文件夹结构

/
  hello-world/
    src/
      HelloWorld/
        SayHello.php
    composer.json

  hello-world-test/
    composer.json

/hello-world/src/HelloWorld/SayHello.php

<?php 

namespace HelloWorld;

class SayHello
{
    public static function world()
    {
        return 'Hello World, Composer!';
    }
}

/hello-world/composer.json

{
    "name": "me/hello-world",
    "type": "puppet-module",
    "require": {
        "composer/installers": "~1.0"
    },
    "autoload": {
        "psr-0": {
            "HelloWorld": "src/"
        }
    }
}

然后我跑了

cd hello-world
git init
git add *
git commit -m "Initial commit"
git tag -a 1.0.0 -m "first stable version"

注意: Composer 需要一个 git 存储库,并且当 minimum-stability 设置为 stable 时还有一个版本标签。如果我们将minimum-stability 设置为dev,我们可以省略标签。


/hello-world-test/composer.json

{
    "minimum-stability": "stable",
    "repositories": [
        {
            "type": "vcs",
            "url": "../hello-world"
        }
    ],
    "require": {
        "me/hello-world": "*"
    }
}

然后我跑了

cd hello-world-test
composer install

Composer 现在自动为composer/installers 创建了一个vendor 文件夹,并为我们的hello-world 包创建了一个modules 文件夹。 modules 文件夹是因为我们的包中的"type": "puppet-module" 而创建的。

【讨论】:

    【解决方案2】:

    Composer Packages Custom Installer plugin, 这将满足您的需求。只需 FORK 并将您的说明添加到 src/Installer CPCInstaller 下的 config 目录中即可为您完成所有工作。

    【讨论】:

      猜你喜欢
      • 2014-05-06
      • 2012-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多