Open asika32764 opened 10 years ago
目前官方整合 composer 的 PR 在這邊 https://github.com/joomla/joomla-cms/pull/3617
另外這是一個可以用 Composer 來安裝一般擴充套件的特殊功能,可以參考看看他們的概念 http://blog.joomlatools.com/2013/11/composer-for-joomla-an-extension-installer-for-developers.html https://github.com/joomlatools/joomla-composer
例如這樣就可以安裝 Ezset
{
"repositories": [
{
"type": "package",
"package": {
"name": "vendor/ezset",
"type": "joomlatools-installer",
"version": "1.0.0",
"dist": {
"url": "https://github.com/asikart/ezset/archive/1.0.2.zip",
"type": "zip"
},
"require": {
"joomlatools/installer": "*"
}
}
}
],
"require": {
"vendor/ezset": "1.0.0"
}
}
我們自己的一些常用 package (不一定是 extension) 可以用類似的方法裝起來,省得還要丟進 packagist
目前構想:
composer.json
放在 libraries/sms
下或新開 sms
資料夾,到此刷新即可
SMS 的整合開發工具可以包成一個 package
{
"require" : {
"sms/dev-tools" : "1.*"
}
}
然後之後我們要加裝的其他套件就往這邊塞
{
"require" : {
"sms/dev-tools" : "1.*",
"paquettg/php-html-parser" : "*",
"aws/sdk" : "*"
}
}
這樣寫就可以安裝這個 repo 內的東西,不用丟上 packagist
{
"require" : {
"sms/dev" : "*"
},
"repositories": [
{
"type": "package",
"package": {
"name": "sms/dev",
"version": "1.0",
"dist": {
"url": "https://github.com/smstw/sms-uni-dev/archive/master.zip",
"type": "zip"
},
"autoload": {
"psr-4" : {
"" : "."
}
}
}
}
]
}
我用一個新的 Joomla 來做測試了,目前運作良好,可惜 JConsole 不能用這種方式安裝
https://github.com/smstw/devsite
https://github.com/smstw/devsite/blob/master/sms/composer.json
似乎一定要先有 joomla 的程式才能安裝?
我是在 windows 7 試的
只拿 composer.json
出來用 composer install
測試
下面是無法安裝後得到的訊息
Loading composer repositories with package information
Installing dependencies (including require-dev)
- Installing sms/dev (1.0.4)
Loading from cache
Warning: Uncaught exception 'ErrorException' with message 'require_once(Z:\New folder/includes/defines.php): failed to open stream: No such file or directory' in Z:\New folder\New folder\vendor\sms\dev\src\Composer\ExtensionInstallerPlugin.php:32
Stack trace:
#0 Z:\New folder\New folder\vendor\sms\dev\src\Composer\ExtensionInstallerPlugin.php(32): Composer\Util\ErrorHandler::handle(2, 'require_once(Z:...', 'Z:\\New folder\\N...', 32, Array)
#1 Z:\New folder\New folder\vendor\sms\dev\src\Composer\ExtensionInstallerPlugin.php(32): SMS\Composer\ExtensionInstallerPlugin::activate()
#2 phar://C:/ProgramData/Composer/bin/composer.phar/src/Composer/Plugin/PluginManager.php(81): SMS\Composer\ExtensionInstallerPlugin->activate(Object(Composer\Composer), Object(Composer\IO\ConsoleIO))
#3 phar://C:/ProgramData/Composer/bin/composer.phar/src/Composer/Plugin/PluginManager.php(239): Composer\Plugin\PluginManager->addPlugin(Object(SMS\Composer\ExtensionInstallerPlugin))
#4 phar://C:/ProgramData/Composer/bin/composer.phar/src/Compose in Z:\New folder\New folder\vendor\sms\dev\src\Composer\ExtensionInstallerPlugin.php on line 32
Call Stack:
0.0180 246872 1. {main}() C:\ProgramData\Composer\bin\composer.phar:0
0.0180 245568 2. require('phar://C:/ProgramData/Composer/bin/composer.phar/bin/composer') C:\ProgramData\Composer\bin\composer.phar:15
0.1410 2411024 3. Composer\Console\Application->run() phar://C:/ProgramData/Composer/bin/composer.phar/bin/composer:43
0.1540 2643192 4. Symfony\Component\Console\Application->run() phar://C:/ProgramData/Composer/bin/composer.phar/src/Composer/Console/Application.php:84
0.1590 2733784 5. Composer\Console\Application->doRun() phar://C:/ProgramData/Composer/bin/composer.phar/vendor/symfony/console/Symfony/Component/Console/Application.php:124
0.1640 2799344 6. Symfony\Component\Console\Application->doRun() phar://C:/ProgramData/Composer/bin/composer.phar/src/Composer/Console/Application.php:135
0.1660 2799656 7. Symfony\Component\Console\Application->doRunCommand() phar://C:/ProgramData/Composer/bin/composer.phar/vendor/symfony/console/Symfony/Component/Console/Application.php:193
0.1660 2799888 8. Symfony\Component\Console\Command\Command->run() phar://C:/ProgramData/Composer/bin/composer.phar/vendor/symfony/console/Symfony/Component/Console/Application.php:889
0.1690 2801928 9. Composer\Command\InstallCommand->execute() phar://C:/ProgramData/Composer/bin/composer.phar/vendor/symfony/console/Symfony/Component/Console/Command/Command.php:252
0.5290 5451136 10. Composer\Installer->run() phar://C:/ProgramData/Composer/bin/composer.phar/src/Composer/Command/InstallCommand.php:123
0.5340 5520440 11. Composer\Installer->doInstall() phar://C:/ProgramData/Composer/bin/composer.phar/src/Composer/Installer.php:216
21.3682 34197768 12. Composer\Installer\InstallationManager->execute() phar://C:/ProgramData/Composer/bin/composer.phar/src/Composer/Installer.php:543
21.3682 34197832 13. Composer\Installer\InstallationManager->install() phar://C:/ProgramData/Composer/bin/composer.phar/src/Composer/Installer/InstallationManager.php:139
21.3682 34198040 14. Composer\Installer\PluginInstaller->install() phar://C:/ProgramData/Composer/bin/composer.phar/src/Composer/Installer/InstallationManager.php:152
21.5112 34538848 15. Composer\Plugin\PluginManager->registerPackage() phar://C:/ProgramData/Composer/bin/composer.phar/src/Composer/Installer/PluginInstaller.php:65
21.5132 34552408 16. Composer\Plugin\PluginManager->addPlugin() phar://C:/ProgramData/Composer/bin/composer.phar/src/Composer/Plugin/PluginManager.php:239
21.5132 34552568 17. SMS\Composer\ExtensionInstallerPlugin->activate() phar://C:/ProgramData/Composer/bin/composer.phar/src/Composer/Plugin/PluginManager.php:81
Fatal error: SMS\Composer\ExtensionInstallerPlugin::activate(): Failed opening required 'Z:\New folder/includes/defines.php' (include_path='.;C:\AppServer\php\PEAR') in Z:\New folder\New folder\vendor\sms\dev\src\Composer\ExtensionInstallerPlugin.php on line 32
Call Stack:
0.0180 246872 1. {main}() C:\ProgramData\Composer\bin\composer.phar:0
0.0180 245568 2. require('phar://C:/ProgramData/Composer/bin/composer.phar/bin/composer') C:\ProgramData\Composer\bin\composer.phar:15
0.1410 2411024 3. Composer\Console\Application->run() phar://C:/ProgramData/Composer/bin/composer.phar/bin/composer:43
0.1540 2643192 4. Symfony\Component\Console\Application->run() phar://C:/ProgramData/Composer/bin/composer.phar/src/Composer/Console/Application.php:84
0.1590 2733784 5. Composer\Console\Application->doRun() phar://C:/ProgramData/Composer/bin/composer.phar/vendor/symfony/console/Symfony/Component/Console/Application.php:124
0.1640 2799344 6. Symfony\Component\Console\Application->doRun() phar://C:/ProgramData/Composer/bin/composer.phar/src/Composer/Console/Application.php:135
0.1660 2799656 7. Symfony\Component\Console\Application->doRunCommand() phar://C:/ProgramData/Composer/bin/composer.phar/vendor/symfony/console/Symfony/Component/Console/Application.php:193
0.1660 2799888 8. Symfony\Component\Console\Command\Command->run() phar://C:/ProgramData/Composer/bin/composer.phar/vendor/symfony/console/Symfony/Component/Console/Application.php:889
0.1690 2801928 9. Composer\Command\InstallCommand->execute() phar://C:/ProgramData/Composer/bin/composer.phar/vendor/symfony/console/Symfony/Component/Console/Command/Command.php:252
0.5290 5451136 10. Composer\Installer->run() phar://C:/ProgramData/Composer/bin/composer.phar/src/Composer/Command/InstallCommand.php:123
0.5340 5520440 11. Composer\Installer->doInstall() phar://C:/ProgramData/Composer/bin/composer.phar/src/Composer/Installer.php:216
21.3682 34197768 12. Composer\Installer\InstallationManager->execute() phar://C:/ProgramData/Composer/bin/composer.phar/src/Composer/Installer.php:543
21.3682 34197832 13. Composer\Installer\InstallationManager->install() phar://C:/ProgramData/Composer/bin/composer.phar/src/Composer/Installer/InstallationManager.php:139
21.3682 34198040 14. Composer\Installer\PluginInstaller->install() phar://C:/ProgramData/Composer/bin/composer.phar/src/Composer/Installer/InstallationManager.php:152
21.5112 34538848 15. Composer\Plugin\PluginManager->registerPackage() phar://C:/ProgramData/Composer/bin/composer.phar/src/Composer/Installer/PluginInstaller.php:65
21.5132 34552408 16. Composer\Plugin\PluginManager->addPlugin() phar://C:/ProgramData/Composer/bin/composer.phar/src/Composer/Plugin/PluginManager.php:239
21.5132 34552568 17. SMS\Composer\ExtensionInstallerPlugin->activate() phar://C:/ProgramData/Composer/bin/composer.phar/src/Composer/Plugin/PluginManager.php:81
是的,因為有另外裝幫助安裝 joomla extension 的 package
這個 repo 目前是設計成專為 joomla 環境運作
我重寫了 composer.json
不用 composer 裝外掛了,另外把 sms-code-sniffer 也裝上去
https://github.com/smstw/devsite/blob/master/sms/composer.json
Windwalker 與 JConsole 為了製作成 Sandbox 所以不能直接更新,元件內的 composer 又無法跟 plugin 外部共用,我們需要一個針對每個專案的統一 composer(或者 composer 支援 merge 額外 json 檔案又更好了),否則每次我們要裝 3rd library 都要全部 commit,檔案數量太重了。希望有一個接近根目錄的 composer 可以讓我們方便做更新
Joomla 3.4 的 composer.json 已經確定放在根目錄,vendor 確定放在 libraries/vendor,我們可以討論一下我們自己的 composer 要怎麼擺放。