2017-08-24 113 views
0

在我的Laravel 5.4 composer.json文件中,我有以下內容自動加載我的自定義程序包。請注意,該軟件包未發佈且正在本地加載。作曲者未安裝本地程序包依賴關係

"autoload": { 
    "classmap": [ 
     "database/seeds", 
     "database/factories" 
    ], 
    "psr-4": { 
     "App\\": "app/", 
     "Vendor\\Module\\": "packages/vendor/module/src" 
    } 
}, 

然後在我的包composer.json文件我有以下

{ 
    "name": "vendor/module", 
    "description": "A custom package", 
    "version": "1.0.0", 
    "type": "project", 
    "authors": [ 
    ], 
    "minimum-stability": "dev", 
    "require": { 
     "laravelcollective/html": "^5.4.0" 
    } 
} 

然而,當我運行作曲家從根目錄Laravel安裝,它永遠不會拿起laravelcollective/HTML我需要的軟件包。

有沒有辦法加載依賴未發佈的本地包?

+0

您是否嘗試了作曲家更新? –

+0

你已經有一個composer.lock文件了嗎?當你作曲者安裝時,composer.lock文件被用來拉取依賴關係。聽起來你需要作曲家更新?實際上,每當你改變composer.json文件中的任何東西時,你都需要作曲者更新。 – gview

+0

這是正確的,根應用程序已經有一個composer.lock文件。我應該刪除鎖定文件並再次運行作曲家更新? –

回答

1

我相信我找到了一個解決方案,雖然它可能不是本地包開發的最佳方法,但它爲我工作。

在根composer.json文件,添加以下,並從根應用似乎現在拿起包的運行作曲家更新和它的依賴,並安裝到一切的主要供應商目錄根應用程序。

"repositories": [ 
    { 
     "type": "path", 
     "url": "packages/vendor/module" 
    } 
], 
"require-dev": { 
    "fzaninotto/faker": "~1.4", 
    "mockery/mockery": "0.9.*", 
    "phpunit/phpunit": "~5.7", 
    "vendor/module": "1.0.*" 
}, 
"autoload": { 
    "classmap": [ 
     "database/seeds", 
     "database/factories" 
    ], 
    "psr-4": { 
     "App\\": "app/", 
     "Vendor\\Module\\": "packages/vendor/module/src" 
    } 
}, 

有關此方法的好處是它唯一的自定義包創建符號鏈接,這樣就可以繼續寫在包目錄的更新和更改生效,而不必提交到本地git存儲庫,如果您將類型設置爲composer.json的存儲庫字段中的vcs

我也有在指定要求-dev的版本號,使其通過的版本約束,否則,你會得到一個警告,運行作曲家當包不符合最低版本要求。