{"id":220,"date":"2026-03-16T00:00:00","date_gmt":"2026-03-15T23:00:00","guid":{"rendered":"https:\/\/helloblog.io\/fi\/wp-composer-yhteisorahoitteinen-seuraaja-wpackagistille\/"},"modified":"2026-03-16T00:00:00","modified_gmt":"2026-03-15T23:00:00","slug":"wp-composer-yhteisorahoitteinen-seuraaja-wpackagistille","status":"publish","type":"post","link":"https:\/\/helloblog.io\/fi\/wp-composer-yhteisorahoitteinen-seuraaja-wpackagistille\/","title":{"rendered":"WP Composer: yhteis\u00f6rahoitteinen seuraaja WPackagistille WordPressin Composer-ty\u00f6nkulussa"},"content":{"rendered":"\n<p>Jos rakennat WordPress-projekteja modernimmin (Bedrock, CI\/CD, lukitut riippuvuudet, toistettavat deployt), Composer on yleens\u00e4 ty\u00f6nkulun ydin. Pitk\u00e4\u00e4n k\u00e4yt\u00e4nn\u00f6ss\u00e4 ainoa \u201chelppo\u201d tapa asentaa WordPress.org-hakemiston lis\u00e4osia ja teemoja Composerilla oli WPackagist.<\/p>\n\n\n\n<p>Maaliskuussa 2026 WPackagist siirtyi WP Enginen omistukseen. Koska kyse on WordPressin Composer-ekosysteemiss\u00e4 eritt\u00e4in keskeisest\u00e4 infrastruktuurista, yhden yrityksen kontrolli her\u00e4tt\u00e4\u00e4 v\u00e4ist\u00e4m\u00e4tt\u00e4 kysymyksi\u00e4 l\u00e4pin\u00e4kyvyydest\u00e4, suunnasta ja saatavuudesta. T\u00e4h\u00e4n tarpeeseen Roots rakensi vaihtoehdon: <strong>WP Composerin<\/strong>.<\/p>\n\n\n\n<p><strong>WP Composer<\/strong> (<a href=\"https:\/\/wp-composer.com\">https:\/\/wp-composer.com<\/a>) on itsen\u00e4inen, yhteis\u00f6rahoitteinen ja t\u00e4ysin avoimen l\u00e4hdekoodin Composer-repo WordPress-lis\u00e4osille ja -teemoille. Se on Rootsin rakentama ja yll\u00e4pit\u00e4m\u00e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Miksi t\u00e4ll\u00e4 on v\u00e4li\u00e4 (ja miksi WPackagist ei en\u00e4\u00e4 riit\u00e4)<\/h2>\n\n\n\n<p>WPackagist syntyi alun perin Outlandishin tekem\u00e4n\u00e4 ja toimi vuosia k\u00e4yt\u00e4nn\u00f6ss\u00e4 standardina. My\u00f6hempin\u00e4 vuosina palvelussa alkoi n\u00e4ky\u00e4 yll\u00e4pidon puute: p\u00e4ivitykset hidastuivat, yll\u00e4pito oli rajallista eik\u00e4 yhteis\u00f6n osallistumiselle ollut kunnollista v\u00e4yl\u00e4\u00e4.<\/p>\n\n\n\n<p>Kun kehitt\u00e4jien perusty\u00f6kaluja hallitsee yksi yritys, p\u00e4\u00e4t\u00f6ksi\u00e4 saatavuudesta, hinnoittelusta ja suunnasta tehd\u00e4\u00e4n helposti suljetummin. Lis\u00e4ksi WPackagistin avoimuus her\u00e4tt\u00e4\u00e4 nyt lis\u00e4kysymyksi\u00e4: sen julkinen GitHub-repo (<a href=\"https:\/\/github.com\/outlandishideas\/wpackagist\">https:\/\/github.com\/outlandishideas\/wpackagist<\/a>) ei en\u00e4\u00e4 vastaa sit\u00e4, mit\u00e4 tuotantosivustolla oikeasti py\u00f6rii.<\/p>\n\n\n\n<p>WP Composerin idea on yksinkertainen: vaihtoehto, joka on l\u00e4pin\u00e4kyv\u00e4, yhteis\u00f6n rahoittama ja rakennettu porukan toimesta, jolla on pitk\u00e4 historia WordPress-kehitt\u00e4jien ty\u00f6kalujen parissa.<\/p>\n\n\n\n<p>Jos haluat katsoa tarkemmat erot suorituskyvyss\u00e4, metadatassa ja toteutuksessa, Rootsilta l\u00f6ytyy vertailu: <a href=\"https:\/\/wp-composer.com\/wp-composer-vs-wpackagist\">https:\/\/wp-composer.com\/wp-composer-vs-wpackagist<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Mit\u00e4 WP Composer tarjoaa k\u00e4yt\u00e4nn\u00f6ss\u00e4<\/h2>\n\n\n\n<p>WP Composer sis\u00e4lt\u00e4\u00e4 <strong>kaikki ilmaiset lis\u00e4osat ja teemat WordPress.org-hakemistosta<\/strong>, asennettavissa Composerilla. Mukana tulee my\u00f6s selke\u00e4 pakettinime\u00e4minen, joka siivoaa yhden vanhan harmin pois: en\u00e4\u00e4 ei tarvita <code>wpackagist-plugin\/&lt;em&gt;<\/code> ja <code>wpackagist-theme\/&lt;\/em&gt;<\/code> -etuliitteit\u00e4.<\/p>\n\n\n\n<p>Uusi nime\u00e4mismalli:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Lis\u00e4osat: <code>wp-plugin\/*<\/code><\/li>\n\n\n<li>Teemat: <code>wp-theme\/*<\/code><\/li>\n\n<\/ul>\n\n\n\n<p>Esimerkki <code>composer.json<\/code>-konfiguraatiosta, jossa repo lis\u00e4t\u00e4\u00e4n ja otetaan k\u00e4ytt\u00f6\u00f6n lis\u00e4osa + teema:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>{\n  &quot;repositories&quot;: [\n    {\n      &quot;name&quot;: &quot;wp-composer&quot;,\n      &quot;type&quot;: &quot;composer&quot;,\n      &quot;url&quot;: &quot;https:\/\/repo.wp-composer.com&quot;,\n      &quot;only&quot;: [&quot;wp-plugin\/*&quot;, &quot;wp-theme\/*&quot;]\n    }\n  ],\n  &quot;require&quot;: {\n    &quot;wp-plugin\/woocommerce&quot;: &quot;^10.0&quot;,\n    &quot;wp-theme\/twentytwentyfive&quot;: &quot;^1.0&quot;\n  }\n}\n\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#E1E4E8\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">  \"repositories\"<\/span><span style=\"color:#E1E4E8\">: [<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    {<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">      \"name\"<\/span><span style=\"color:#E1E4E8\">: <\/span><span style=\"color:#9ECBFF\">\"wp-composer\"<\/span><span style=\"color:#E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">      \"type\"<\/span><span style=\"color:#E1E4E8\">: <\/span><span style=\"color:#9ECBFF\">\"composer\"<\/span><span style=\"color:#E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">      \"url\"<\/span><span style=\"color:#E1E4E8\">: <\/span><span style=\"color:#9ECBFF\">\"https:\/\/repo.wp-composer.com\"<\/span><span style=\"color:#E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">      \"only\"<\/span><span style=\"color:#E1E4E8\">: [<\/span><span style=\"color:#9ECBFF\">\"wp-plugin\/*\"<\/span><span style=\"color:#E1E4E8\">, <\/span><span style=\"color:#9ECBFF\">\"wp-theme\/*\"<\/span><span style=\"color:#E1E4E8\">]<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">  ],<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">  \"require\"<\/span><span style=\"color:#E1E4E8\">: {<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">    \"wp-plugin\/woocommerce\"<\/span><span style=\"color:#E1E4E8\">: <\/span><span style=\"color:#9ECBFF\">\"^10.0\"<\/span><span style=\"color:#E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">    \"wp-theme\/twentytwentyfive\"<\/span><span style=\"color:#E1E4E8\">: <\/span><span style=\"color:#9ECBFF\">\"^1.0\"<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Yhteensopivuus Rootsin WordPress core -pakettien kanssa<\/h3>\n\n\n\n<p>WP Composer on Rootsin suosittelema repo k\u00e4ytett\u00e4v\u00e4ksi yhdess\u00e4 heid\u00e4n WordPress core -pakettiensa kanssa: <a href=\"https:\/\/wp-composer.com\/roots-wordpress\"><code>roots\/wordpress<\/code><\/a>, <code>roots\/wordpress-full<\/code> ja <code>roots\/wordpress-no-content<\/code>.<\/p>\n\n\n\n<p>Tyypillisess\u00e4 <a href=\"https:\/\/roots.io\/bedrock\/\">Bedrock<\/a>-projektissa malli on t\u00e4m\u00e4: WordPressin core tulee paketista <code>roots\/wordpress<\/code> ja lis\u00e4osat\/teemat tulevat WP Composerin kautta.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Migraatio WPackagistista WP Composeriin<\/h2>\n\n\n\n<p>Vaihto onnistuu suoraviivaisesti muutamalla komennolla. Alla on k\u00e4yt\u00e4nn\u00f6n askel askeleelta -polku, joka tekee samalla selv\u00e4ksi mit\u00e4 projektissa muuttuu.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1) Poista vanhat WPackagist-paketit<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>composer remove wpackagist-plugin\/woocommerce wpackagist-theme\/twentytwentyfive\n\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#B392F0\">composer<\/span><span style=\"color:#9ECBFF\"> remove<\/span><span style=\"color:#9ECBFF\"> wpackagist-plugin\/woocommerce<\/span><span style=\"color:#9ECBFF\"> wpackagist-theme\/twentytwentyfive<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">2) Vaihda repository-asetus WP Composeriin<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>composer config --unset repositories.wpackagist &amp;&amp; composer config repositories.wp-composer composer https:\/\/repo.wp-composer.com\n\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#B392F0\">composer<\/span><span style=\"color:#9ECBFF\"> config<\/span><span style=\"color:#79B8FF\"> --unset<\/span><span style=\"color:#9ECBFF\"> repositories.wpackagist<\/span><span style=\"color:#E1E4E8\"> &#x26;&#x26; <\/span><span style=\"color:#B392F0\">composer<\/span><span style=\"color:#9ECBFF\"> config<\/span><span style=\"color:#9ECBFF\"> repositories.wp-composer<\/span><span style=\"color:#9ECBFF\"> composer<\/span><span style=\"color:#9ECBFF\"> https:\/\/repo.wp-composer.com<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">3) Lis\u00e4\u00e4 riippuvuudet uudella nime\u00e4misell\u00e4<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>composer require wp-plugin\/woocommerce wp-theme\/twentytwentyfive\n\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#B392F0\">composer<\/span><span style=\"color:#9ECBFF\"> require<\/span><span style=\"color:#9ECBFF\"> wp-plugin\/woocommerce<\/span><span style=\"color:#9ECBFF\"> wp-theme\/twentytwentyfive<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Vaihtoehto: aja migraati skripti, joka p\u00e4ivitt\u00e4\u00e4 composer.json:n automaattisesti<\/h3>\n\n\n\n<p>Roots tarjoaa my\u00f6s valmiin migraati skriptin, joka hoitaa <code>composer.json<\/code>-muutokset puolestasi:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>curl -sO https:\/\/raw.githubusercontent.com\/roots\/wp-composer\/main\/scripts\/migrate-from-wpackagist.sh &amp;&amp; bash migrate-from-wpackagist.sh\n\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#B392F0\">curl<\/span><span style=\"color:#79B8FF\"> -sO<\/span><span style=\"color:#9ECBFF\"> https:\/\/raw.githubusercontent.com\/roots\/wp-composer\/main\/scripts\/migrate-from-wpackagist.sh<\/span><span style=\"color:#E1E4E8\"> &#x26;&#x26; <\/span><span style=\"color:#B392F0\">bash<\/span><span style=\"color:#9ECBFF\"> migrate-from-wpackagist.sh<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Jos seuraat plugin-p\u00e4ivityksi\u00e4 GitHub Actionsilla<\/h3>\n\n\n\n<p>Jos k\u00e4yt\u00e4t Rootsin GitHub Actionia lis\u00e4osien p\u00e4ivitysten seurantaan, se on nimetty uudelleen WPackagist Changelog Actionista muotoon <strong>WP Composer Changelog Action<\/strong> ja tukee suoraan uutta <code>wp-plugin\/&lt;em&gt;<\/code> ja <code>wp-theme\/&lt;\/em&gt;<\/code> -nime\u00e4mist\u00e4: <a href=\"https:\/\/github.com\/roots\/wp-composer-changelog-action\">https:\/\/github.com\/roots\/wp-composer-changelog-action<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Suorituskyky: miksi WP Composer on selv\u00e4sti nopeampi<\/h2>\n\n\n\n<p>WP Composer hy\u00f6dynt\u00e4\u00e4 Composer v2:n <strong><code>metadata-url<\/code>-protokollaa<\/strong>, jonka idea on, ett\u00e4 Composer hakee metadatan vain niille paketeille, joita se oikeasti tarvitsee riippuvuuksien ratkaisuun. WPackagist nojaa vanhempaan <code>provider-includes<\/code>-malliin, jossa Composer joutuu lataamaan isoja indeksitiedostoja (metadataa tuhansista paketeista) ennen kuin se edes p\u00e4\u00e4see kunnolla resolvoimaan projektin riippuvuuksia.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Composerin resolve-ajat (cold resolve, ei cachea)<\/h3>\n\n\n\n<p>Alla olevat luvut ovat cold resolve -tilanteesta (ei v\u00e4limuistia). Pienempi aika on parempi.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>10 lis\u00e4osaa: WP Composer <strong>0,7 s<\/strong> vs WPackagist 12,3 s \u2192 <strong>17\u00d7 nopeampi<\/strong><\/li>\n\n\n<li>20 lis\u00e4osaa: WP Composer <strong>1,1 s<\/strong> vs WPackagist 19,0 s \u2192 <strong>17\u00d7 nopeampi<\/strong><\/li>\n\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Metadata ja v\u00e4limuisti (caching)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Composer v2 <code>metadata-url<\/code>: WP Composer <strong>kyll\u00e4<\/strong>, WPackagist <strong>ei<\/strong><\/li>\n\n\n<li>CDN-caching: WP Composer <code>public, max-age=300<\/code>, WPackagist <code>no-cache, private<\/code><\/li>\n\n\n<li>Per-package-tiedostot: WP Composerissa immuuttiset, content-addressed ja voidaan cachettaa k\u00e4yt\u00e4nn\u00f6ss\u00e4 loputtomiin; WPackagistissa ei content-addressed-mallia<\/li>\n\n<\/ul>\n\n\n\n<div class=\"wp-block-group callout callout-info is-style-info is-layout-flow wp-block-group-is-layout-flow\" style=\"border-width:1px;border-radius:8px;padding-top:1rem;padding-right:1.5rem;padding-bottom:1rem;padding-left:1.5rem\">\n\n<h4 class=\"wp-block-heading callout-title\">Huomio benchmarkeista<\/h4>\n\n\n<p>Mittaukset on ajettu yhdest\u00e4 sijainnista Composer 2.7+ -versiolla. Tulokset voivat vaihdella alueen ja verkko-olosuhteiden mukaan. Benchmark-skriptit ovat avoimena GitHubissa: https:\/\/github.com\/roots\/wp-composer\/tree\/main\/benchmarks.<\/p>\n\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">T\u00e4ysin avoin l\u00e4hdekoodi (ja oikeasti forkattaessa ajettavissa)<\/h2>\n\n\n\n<p>WP Composerin koko paketti &#8211; sovelluskoodi, dokumentaatio ja deployment-konfiguraatio &#8211; on avoimena GitHubissa: <a href=\"https:\/\/github.com\/roots\/wp-composer\">https:\/\/github.com\/roots\/wp-composer<\/a>. K\u00e4yt\u00e4nn\u00f6ss\u00e4 t\u00e4m\u00e4 tarkoittaa my\u00f6s sit\u00e4, ett\u00e4 kuka tahansa voi forkata projektin ja ajaa omaa instanssia.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Yhteis\u00f6rahoitteinen malli<\/h2>\n\n\n\n<p>WP Composer rahoitetaan kokonaan yhteis\u00f6n toimesta GitHub Sponsorsin kautta: <a href=\"https:\/\/github.com\/sponsors\/roots\">https:\/\/github.com\/sponsors\/roots<\/a>. Sponsoroimalla tuet suoraan infrastruktuuria, kehityst\u00e4 ja yll\u00e4pitoa &#8211; sek\u00e4 samalla laajemmin Roots-ekosysteemi\u00e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Yhteenveto: milloin WP Composer kannattaa ottaa k\u00e4ytt\u00f6\u00f6n<\/h2>\n\n\n\n<p>Jos WordPressin riippuvuudet el\u00e4v\u00e4t <code>composer.json<\/code>:ssa ja haluat ty\u00f6kaluketjun, joka on l\u00e4pin\u00e4kyv\u00e4, nopeasti toimiva ja riippumaton yhden yrityksen p\u00e4\u00e4t\u00f6ksist\u00e4, WP Composer on looginen valinta. Migraatio on muutaman komennon operaatio, nime\u00e4mismalli selkeytyy (<code>wp-plugin\/&lt;em&gt;<\/code>, <code>wp-theme\/&lt;\/em&gt;<\/code>) ja samalla saat Composer v2:n modernin metadata-haun tuomat nopeushy\u00f6dyt.<\/p>\n\n\n<div class=\"references-section\">\n                <h2>Viitteet \/ L\u00e4hteet<\/h2>\n                <ul class=\"references-list\"><li><a href=\"https:\/\/roots.io\/introducing-wp-composer-as-a-wpackagist-replacement\/\" target=\"_blank\" rel=\"noopener noreferrer\">Introducing WP Composer as a WPackagist Replacement<\/a><\/li><li><a href=\"https:\/\/wp-composer.com\" target=\"_blank\" rel=\"noopener noreferrer\">WP Composer<\/a><\/li><li><a href=\"https:\/\/wp-composer.com\/wp-composer-vs-wpackagist\" target=\"_blank\" rel=\"noopener noreferrer\">WP Composer vs WPackagist<\/a><\/li><li><a href=\"https:\/\/github.com\/outlandishideas\/wpackagist\" target=\"_blank\" rel=\"noopener noreferrer\">wpackagist (GitHub repository)<\/a><\/li><li><a href=\"https:\/\/github.com\/roots\/wp-composer\" target=\"_blank\" rel=\"noopener noreferrer\">wp-composer (GitHub repository)<\/a><\/li><li><a href=\"https:\/\/github.com\/roots\/wp-composer\/tree\/main\/benchmarks\" target=\"_blank\" rel=\"noopener noreferrer\">Benchmarks (wp-composer)<\/a><\/li><li><a href=\"https:\/\/github.com\/roots\/wp-composer\/blob\/main\/scripts\/migrate-from-wpackagist.sh\" target=\"_blank\" rel=\"noopener noreferrer\">Migration script (migrate-from-wpackagist.sh)<\/a><\/li><li><a href=\"https:\/\/github.com\/roots\/wp-composer-changelog-action\" target=\"_blank\" rel=\"noopener noreferrer\">WP Composer Changelog Action<\/a><\/li><li><a href=\"https:\/\/roots.io\/bedrock\/\" target=\"_blank\" rel=\"noopener noreferrer\">Roots Bedrock<\/a><\/li><li><a href=\"https:\/\/wp-composer.com\/roots-wordpress\" target=\"_blank\" rel=\"noopener noreferrer\">Roots WordPress core packages (roots\/wordpress)<\/a><\/li><li><a href=\"https:\/\/github.com\/sponsors\/roots\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Sponsors (Roots)<\/a><\/li><\/ul>\n            <\/div>","protected":false},"excerpt":{"rendered":"<p>WPackagist on ollut vuosia oletusreitti WordPress-lis\u00e4osien ja -teemojen asentamiseen Composerilla. Nyt tarjolla on riippumaton vaihtoehto, joka korjaa sek\u00e4 hallintamallin ett\u00e4 suorituskyvyn kipupisteit\u00e4.<\/p>\n","protected":false},"author":58,"featured_media":219,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[27],"tags":[69,8,72,3],"class_list":["post-220","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-wordpress-ekosysteemi","tag-bedrock","tag-composer","tag-devops","tag-roots"],"_links":{"self":[{"href":"https:\/\/helloblog.io\/fi\/wp-json\/wp\/v2\/posts\/220","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/helloblog.io\/fi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/helloblog.io\/fi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/helloblog.io\/fi\/wp-json\/wp\/v2\/users\/58"}],"replies":[{"embeddable":true,"href":"https:\/\/helloblog.io\/fi\/wp-json\/wp\/v2\/comments?post=220"}],"version-history":[{"count":0,"href":"https:\/\/helloblog.io\/fi\/wp-json\/wp\/v2\/posts\/220\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/helloblog.io\/fi\/wp-json\/wp\/v2\/media\/219"}],"wp:attachment":[{"href":"https:\/\/helloblog.io\/fi\/wp-json\/wp\/v2\/media?parent=220"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/helloblog.io\/fi\/wp-json\/wp\/v2\/categories?post=220"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/helloblog.io\/fi\/wp-json\/wp\/v2\/tags?post=220"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}