Composer: Difference between revisions
reorg |
extract SemVer to new article |
||
| (8 intermediate revisions by the same user not shown) | |||
| Line 9: | Line 9: | ||
<ol> | <ol> | ||
<li> [[mw:Composer]] is used in the MediaWiki engine to manage all core libraries and dependencies since version 1.25 (including composer-local.json) | <li> [[mw:Composer]] is used in the MediaWiki engine to manage all core libraries and dependencies since version 1.25 (including composer-local.json) | ||
< | <syntaxhighlight lang="bash"> | ||
cd $IP | cd $IP | ||
cp composer.local.json-sample composer.local.json | cp composer.local.json-sample composer.local.json | ||
composer update --no-dev --dry-run | composer update --no-dev --dry-run | ||
</ | </syntaxhighlight> | ||
<li> [[mw:Composer/For extensions]] on using Composer to manage extensions | <li> [[mw:Composer/For extensions]] on using Composer to manage extensions | ||
<li> [[mw:Manual:composer.json best practices]] for how to add Composer support to your extensions (including extension.json and skin.json) | <li> [[mw:Manual:composer.json best practices]] for how to add Composer support to your extensions (including extension.json and skin.json) | ||
| Line 20: | Line 20: | ||
=== With Meza === | === With Meza === | ||
=== MezaLocalExtensions.yml === | |||
If the extension should be '''installed''' by Composer, then use a stanza like: | |||
<syntaxhighlight lang="yaml"> | |||
- name: Mermaid | |||
composer: "mediawiki/mermaid" | |||
version: ~2.2 | |||
config: | | |||
wfLoadExtension( 'Mermaid' ); | |||
$mermaidgDefaultTheme = 'neutral'; | |||
</syntaxhighlight> | |||
If the extension source is controlled by [[git]], and you want to have the extension's <tt>composer.json</tt> file "seen" (merged) by MediaWiki, then simply add the line: | |||
composer_merge: true | |||
to the 'normal' extension stanza specifying the source. | |||
=== Install libraries === | |||
In general, if you want to install something into your MediaWiki instance, you can do the following from the '$IP' (Install Path) directory: | |||
<syntaxhighlight lang="bash"> | |||
# add the library to composer.local.json | |||
COMPOSER=composer.local.json composer require --no-update mwstake/mediawiki-component-events:~4 | |||
# install it to 'vendor' without dev requirements and optimize the autoloader | |||
composer update mwstake/mediawiki-component-events --no-dev -o | |||
# check to see that it's installed | |||
composer show |grep mwstake | |||
</syntaxhighlight> | |||
=== Test an upgrade === | |||
<syntaxhighlight lang="bash"> | |||
IP=/opt/htdocs/mediawiki/ | |||
cd $IP | |||
COMPOSER=composer.local.json composer require --no-update mediawiki/maps:~11.0 | |||
composer update mediawiki/maps --no-dev -o | |||
# Depending on other settings, you may need to restart php-fpm | |||
sudo systemctl restart php-fpm | |||
</syntaxhighlight> | |||
=== Check / Overwrite Local Modifications === | |||
If you're using [[Meza]] to deploy your MediaWiki platform, you may wonder whether there are local modifications that a new deploy could overwrite. | If you're using [[Meza]] to deploy your MediaWiki platform, you may wonder whether there are local modifications that a new deploy could overwrite. | ||
| Line 32: | Line 70: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== | This feature is now enabled in Meza 43, and controlled by the default config <tt>config/defaults.yml</tt> <code>overwrite_local_changes: false</code> which in turn sets the config section of <tt>composer.local.json</tt> | ||
=== Prefer Source === | |||
Say you installed Semantic Mediawiki with <code>composer require</code> and then when you went to your 'extensions' directory you were <i class="fa fa-frown-o"></i> because it wasn't a git checkout. You can rectify that by redoing the command, but with the <code>--prefer-source</code> option. nb. You first have to move the existing directory out of the way: <code>mv SemanticMediaWiki unused/</code> <code>cd ../ composer require --update-no-dev --sort-packages --optimize-autoloader -vvv mediawiki/semantic-media-wiki "~2.4" --prefer-source</code> But, it's still a bit different than you might expect, because Composer leaves you with a detached head owing to the specific version that it checks out (see composer.lock). | Say you installed Semantic Mediawiki with <code>composer require</code> and then when you went to your 'extensions' directory you were <i class="fa fa-frown-o"></i> because it wasn't a git checkout. You can rectify that by redoing the command, but with the <code>--prefer-source</code> option. nb. You first have to move the existing directory out of the way: <code>mv SemanticMediaWiki unused/</code> <code>cd ../ composer require --update-no-dev --sort-packages --optimize-autoloader -vvv mediawiki/semantic-media-wiki "~2.4" --prefer-source</code> But, it's still a bit different than you might expect, because Composer leaves you with a detached head owing to the specific version that it checks out (see composer.lock). | ||
<pre> | <pre> | ||
| Line 58: | Line 98: | ||
Installing it on your own host would look something like this | Installing it on your own host would look something like this | ||
< | <syntaxhighlight lang="bash"> | ||
curl -sS https://getcomposer.org/installer | php | curl -sS https://getcomposer.org/installer | php | ||
sudo mv composer.phar /usr/local/bin/composer | sudo mv composer.phar /usr/local/bin/composer | ||
| Line 65: | Line 105: | ||
# now you can use it to do things like install the latest version of Drush | # now you can use it to do things like install the latest version of Drush | ||
composer global require drush/drush:dev-master | composer global require drush/drush:dev-master | ||
</ | </syntaxhighlight> | ||
while installing it on a shared host like WebFaction would be slightly modified | while installing it on a shared host like WebFaction would be slightly modified | ||
< | <syntaxhighlight lang="bash"> | ||
ln -s `which php54` ~/bin/php | ln -s `which php54` ~/bin/php | ||
curl -sS https://getcomposer.org/installer | php54 | curl -sS https://getcomposer.org/installer | php54 | ||
| Line 79: | Line 119: | ||
composer global require drush/drush:dev-master | composer global require drush/drush:dev-master | ||
drush --version | drush --version | ||
</ | </syntaxhighlight> | ||
== Semantic Versioning == | == Semantic Versioning == | ||
Using Composer correctly means that you understand and follow [ | Using Composer correctly means that you understand and follow [[Semantic Versioning]] | ||
== Commands == | == Commands == | ||
<code>composer show -a mediawiki/semantic-media-wiki</code> will show you the available versions of the package. | |||
<code>composer --help</code> will show you something like this: | <code>composer --help</code> will show you something like this: | ||
| Line 152: | Line 191: | ||
</pre> | </pre> | ||
== See Also == | |||
[[Composer/autoloading]] | |||
[[Category:Development]] | [[Category:Development]] | ||
[[Category:Tools]] | [[Category:Tools]] | ||
[[Category:PHP]] | [[Category:PHP]] | ||