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)
<source lang="bash">
<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
</source>
</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>


=== Use git checkouts ===
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


<source lang="bash">
<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
</source>
</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  


<source lang="bash">
<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
</source>
</syntaxhighlight>


== Semantic Versioning ==
== Semantic Versioning ==


Using Composer correctly means that you understand and follow [https://semver.org/ Semantic Versioning]
Using Composer correctly means that you understand and follow [[Semantic Versioning]]
 
Don't use [https://thephp.cc/articles/the-death-star-version-constraint the "Death Star" version constraint] (since it's not a constraint at all).


== 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]]