2013-07-02 76 views
30

我是一名作曲家初學者,我試圖讓一個項目依賴於另一個項目,而這兩個項目只存在於本地機器上。作曲家 - 使用本地存儲庫

的composer.json在我的圖書館項目(項目A)是:

{ 
    "name" : "project/util", 
    "type" : "library" 
} 

我在這個項目的基本文件夾初始化飯桶。

我的項目composer.json取決於第一個(項目B):

{ 
    "repositories": [ 
     { 
      "name" : "util", 
      "type" : "git", 
      "url" : "/d/workspaces/util" 
     } 
    ], 

    "require": { 
     "project/util" : "*" 
    }, 
} 

當我從項目B運行composer install,我得到以下錯誤:

[RuntimeException] 
Failed to clone , could not read packages from it 
fatal: repository '' does not exist 

我asume東西與版本庫的URL有關,但我不確定在那裏寫什麼。

回答

23

我認爲你剛纔的語法錯了。該類型應該只是VCS,然後作曲家會指出它是什麼類型的VCS。

因此,在你的項目B,爲存儲庫條目應爲:

"repositories": [ 
    { 
     "type": "vcs", 
     "url" : "/d/workspaces/util" 
    } 
], 

你並不需要什麼名字圖書館是/d/workspaces/util可用。 Composer將掃描該目錄中的composer.json文件,並知道可用的項目名稱,並優先使用該目錄中的項目,優先於packagist或其他存儲庫中列出的版本。

+0

好吧,當我改變爲vcs時,我得到這個消息:[運行時例外]目錄不存在:/ d/workspaces/util – Banana

+3

呃,大概那麼目錄不存在,或者不可訪問? – Danack

+2

我認爲該目錄拼寫錯誤。你確定你必須提供它作爲'/ d/workspaces/util'而不是'd:/ workspaces/util'嗎? –

1

除了Danack的解決方案之外:將路徑從/ d /更改爲d:/爲我工作。

像這樣:

"repositories": [ 
    { 
     "type": "vcs", 
     "url" : "d:/workspaces/util" 
    } 
], 
24

使用作曲家(不打算packagist每次改變時間)自動加載本地包。

有很多方法可以做到這一點,我將他們的被覆蓋2:

在任何情況下,我們有兩個主要的政黨:
- 在本地包(我們不代碼想要在packagist上發佈以便能夠在我們的項目作曲家中自動加載它)。
- 主項目(需要使用本地軟件包代碼的代碼庫,可以是其他軟件包或任何項目)。


了Methode 1:(直接命名空間)

打開主項目文件composer.json和自動加載使用任何方法本地名稱空間包(PSR-4,PSR-0,...)。

示例:

如果在作曲家中。本地包的JSON我們:

"autoload": { 
    "psr-4": { 
     「Local\\Pack\\": "library" 
    } 
    }, 
    "autoload-dev": { 
    "psr-4": { 
     "Local\\Pack\\Tests\\": "tests" 
    } 
    }, 

然後在主體工程composer.json我們應該有:

"autoload": { 
    "psr-4": { 
     "Mahmoudz\\Project\\": "src", 
     "Local\\Pack\\": "../path/to/local/pack/library」     << referencing the other local package 
    } 
    }, 
    "autoload-dev": { 
    "psr-4": { 
     "Mahmoudz\\Project\\Tests\\": "tests" 
    } 
    }, 

優點:
- 你不德勤供應商目錄(錯誤地運行作曲家更新不會覆蓋你的本地更改)
- 你不需要你的軟件包在packagist上使用它
- 你在一個地方工作(本地包GE)和更改會自動加載在主項目
缺點:
- 你不能發佈生產(需要發佈到所需要的真正的封裝)前編輯composer.json

了Methode 2:(本地存儲庫)

從本地存儲庫下載本地包。

本地包:
1.在包初始化的git(即使你不想使用它 - 無需提交任何東西)
2.添加composer.json文件。在文件請確保您有以下幾點:

"name": 「vendor-name/package-name", 

"autoload": { … // use whichever method you prefer, but make sure it’s being loaded correctly 

"minimum-stability": 「dev" 
  • composer dump-autoload
  • 主要項目:
    1.編輯您的composer.json遏制以下:

    "repositories": [ 
        { 
         "type": "vcs", 
         "url": 「/full/path/to/the/local/package/package-name" 
        } 
        ], 
        "require": { 
        "vendor-name/package-name": "dev-master" 
        }, 
    
  • 作曲家更新供應商的名稱/包名稱
  • 現在檢查你的供應商目錄,你應該看到供應商的名稱/套餐的名稱
  • 注意:當您在本地包(不是供應商)的變化,你需要git的承諾,那麼你可以作曲家更新主項目,它將獲得最新的回購副本到​​主項目供應商目錄。

    優勢:
    - 你不(誤運行作曲家更新將不會覆蓋本地更改)德勤供應商目錄 - 你不需要你的包是在packagist使用它
    缺點:
    - 您必須不斷提交您的更改(在本地軟件包中),然後在主項目中運行作曲家更新
    - 您不能在生產環境中發佈composer.json(在發佈前需要進行編輯以要求真正的軟件包)

    +4

    非常感謝! **注意:**如果您使用_vcs_方法(#2),請不要忘記提交您的composer.json更改。容易忘記,你會爲了解決爲什麼作曲家用「找不到包裝版本」的錯誤來嘲弄你的包裝而撓頭。 – mangonights

    +2

    你的第一個方法拯救了我的生命!獎勵! –

    +0

    第二種方法和@mangonights評論也救了我......謝謝你們所有兄弟 –