<?xml 
version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="https://www.momh.fr/spip.php?page=backend.xslt" ?>
<rss version="2.0" 
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:atom="http://www.w3.org/2005/Atom"
>

<channel xml:lang="fr">
	<title>momh</title>
	<link>https://momh.fr/</link>
	<description>My Own Memory Hole se veut une sorte de &#171;&#160;vitrine&#160;&#187; de mon parcours et de mon exp&#233;rience mais aussi de mes centres d'int&#233;r&#234;t et constitue donc en quelque sorte ma m&#233;moire en ligne, m&#233;moire virtuelle d&#233;localis&#233;e mais ordonn&#233;e et index&#233;e&#8230;</description>
	<language>fr</language>
	<generator>SPIP - www.spip.net</generator>
	<atom:link href="https://www.momh.fr/spip.php?id_mot=28&amp;page=backend" rel="self" type="application/rss+xml" />




<item xml:lang="fr">
		<title>SPIPer avec DDEV (bis)</title>
		<link>https://www.momh.fr/spiper-avec-ddev-bis</link>
		<guid isPermaLink="true">https://www.momh.fr/spiper-avec-ddev-bis</guid>
		<dc:date>2024-05-21T04:37:58Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Brice Boucard</dc:creator>


		<dc:subject>&lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;</dc:subject>
		<dc:subject>webdev</dc:subject>

		<description>
&lt;p&gt;Si nous parvenions dans notre premier article &#224; obtenir un environnement de d&#233;veloppement sous &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; rapidement gr&#226;ce &#224; &lt;span class=&#034;caps&#034;&gt;DDEV&lt;/span&gt;, la m&#233;thode propos&#233;e aboutit &#224; rendre probl&#233;matique l'usage de &lt;span class=&#034;caps&#034;&gt;PHP&lt;/span&gt; en &lt;span class=&#034;caps&#034;&gt;CLI&lt;/span&gt;. La solution, pour ce qui est de &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; en tout cas&#160;: ne plus utiliser le param&#232;tre &#8212;docroot. &lt;br class='autobr' /&gt; Installer une version 4.3 &lt;br class='autobr' /&gt;
On commence par cloner le d&#233;p&#244;t de &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;, puis l'on configure notre environnement &lt;span class=&#034;caps&#034;&gt;DDEV&lt;/span&gt; avant d'utiliser la commande checkout pour basculer sur la branche qui nous int&#233;resse&#160;:&#160;(&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.momh.fr/blog" rel="directory"&gt;Blog&lt;/a&gt;

/ 
&lt;a href="https://www.momh.fr/spip" rel="tag"&gt;&lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;&lt;/a&gt;, 
&lt;a href="https://www.momh.fr/webdev" rel="tag"&gt;webdev&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Si nous parvenions &lt;a href='https://www.momh.fr/spiper-avec-ddev' class=&#034;spip_in&#034;&gt;dans notre premier article&lt;/a&gt; &#224; obtenir un environnement de d&#233;veloppement sous &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; rapidement gr&#226;ce &#224; &lt;span class=&#034;caps&#034;&gt;DDEV&lt;/span&gt;, la m&#233;thode propos&#233;e aboutit &#224; rendre probl&#233;matique l'usage de &lt;span class=&#034;caps&#034;&gt;PHP&lt;/span&gt; en &lt;span class=&#034;caps&#034;&gt;CLI&lt;/span&gt;. La solution, pour ce qui est de &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; en tout cas&#160;: ne plus utiliser le param&#232;tre &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;--docroot&lt;/code&gt;.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;spip&#034;&gt;Installer une version 4.3&lt;/h2&gt;
&lt;p&gt;On commence par cloner le d&#233;p&#244;t de &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;, puis l'on configure notre environnement &lt;span class=&#034;caps&#034;&gt;DDEV&lt;/span&gt; avant d'utiliser la commande &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;checkout&lt;/code&gt; pour basculer sur la branche qui nous int&#233;resse&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;git clone https://git.spip.net/spip/spip.git spip43 cd spip43 ddev config --project-type=php --php-version=7.4 ddev checkout ddev checkout spip -b4.3 public &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Si vous &#234;tes confront&#233; au message suivant&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;fatal: detected dubious ownership in repository at '/var/www/html' To add an exception for this directory, call: git config --global --add safe.directory /var/www/html &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Il suffit d'ex&#233;cuter la commande indiqu&#233;e, au sein du container bien &#233;videmment&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;ddev exec git config --global --add safe.directory /var/www/html &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt;Installer la branche &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;master&lt;/code&gt;&lt;/h2&gt;&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;git clone https://git.spip.net/spip/spip.git master cd master ddev config --project-type=php --php-version=8.2 ddev composer install ddev composer local mode-dev rm -rf web/plugins-dist ddev composer local install &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>SPIPer avec DDEV</title>
		<link>https://www.momh.fr/spiper-avec-ddev</link>
		<guid isPermaLink="true">https://www.momh.fr/spiper-avec-ddev</guid>
		<dc:date>2024-03-21T12:26:32Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Brice Boucard</dc:creator>


		<dc:subject>webdev</dc:subject>
		<dc:subject>&lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;</dc:subject>

		<description>
&lt;p&gt;&lt;span class=&#034;caps&#034;&gt;DDEV&lt;/span&gt; est, pour le dire vite, une surcouche &#224; Docker permettant de mettre en place extr&#234;mement rapidement des environnements de d&#233;veloppement Web. Nous allons tenter de d&#233;crire ici comment nous l'utilisons pour nos d&#233;veloppements avec &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;. &lt;br class='autobr' /&gt; Je ne vais pas ici d&#233;crire l'installation de &lt;span class=&#034;caps&#034;&gt;DDEV&lt;/span&gt;, sa documentation se suffisant &#224; elle-m&#234;me plus que largement. &lt;br class='autobr' /&gt;
&lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;-Cli &amp; checkout &lt;br class='autobr' /&gt;
Ces outils en ligne de commande que sont checkout (m&#233;thode unifi&#233;e d'installation et de mise &#224; jour) et &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;-Cli&#160;(&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.momh.fr/blog" rel="directory"&gt;Blog&lt;/a&gt;

/ 
&lt;a href="https://www.momh.fr/webdev" rel="tag"&gt;webdev&lt;/a&gt;, 
&lt;a href="https://www.momh.fr/spip" rel="tag"&gt;&lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;&lt;a href=&#034;https://ddev.com/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;&lt;span class=&#034;caps&#034;&gt;DDEV&lt;/span&gt;&lt;/a&gt; est, pour le dire vite, une surcouche &#224; Docker permettant de mettre en place extr&#234;mement rapidement des environnements de d&#233;veloppement Web. Nous allons tenter de d&#233;crire ici comment nous l'utilisons pour nos d&#233;veloppements avec &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Je ne vais pas ici d&#233;crire l'installation de &lt;span class=&#034;caps&#034;&gt;DDEV&lt;/span&gt;, &lt;a href=&#034;https://ddev.readthedocs.io/en/stable/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;sa documentation&lt;/a&gt; se suffisant &#224; elle-m&#234;me plus que largement.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;&lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;-Cli &amp; checkout&lt;/h2&gt;
&lt;p&gt;Ces outils en ligne de commande que sont &lt;a href=&#034;https://git.spip.net/spip-contrib-outils/checkout&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;checkout&lt;/a&gt; (m&#233;thode unifi&#233;e d'installation et de mise &#224; jour) et &lt;a href=&#034;https://git.spip.net/spip-contrib-outils/spip-cli&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;&lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;-Cli&lt;/a&gt; (installation, mise &#224; jour, manipulation...) m'apparaissent comme indispensables&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;; un grand merci &#224; nicod donc pour en proposer &lt;a href=&#034;https://git.spip.net/spip-contrib-outils/ddev&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;une int&#233;gration &#224; &lt;span class=&#034;caps&#034;&gt;DDEV&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Personnellement, j'ai commenc&#233; par cloner le d&#233;p&#244;t dans un r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;~/sources&lt;/code&gt; avant de cr&#233;er un lien (non symbolique) pour chacun des deux scripts vers le r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;~/.ddev/commands/web/&lt;/code&gt;&#160;:&lt;/p&gt;
&lt;p&gt;Ainsi, pour chacun de nos projets, ces deux commandes seront accessibles une fois le conteneur web lanc&#233; (seul b&#233;mol, il conviendra de r&#233;installer les utilitaires &#224; chaque red&#233;marrage, mais les scripts propos&#233;s par nicod s'en charge tr&#232;s bien).&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Installer &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; dans un environnement &lt;span class=&#034;caps&#034;&gt;DDEV&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;Avant d'installer &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;, il convient de pr&#233;parer notre environnement de d&#233;veloppement&#160;: cr&#233;ation d'un r&#233;pertoire, configuration du projet et initialisation&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;shell&#034; class='spip_code spip_code_block language-shell' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;mkdir mon_site &amp;&amp; cd mon_site ddev config --project-type=php --webserver-type=apache-fpm --docroot=web --composer-root=web ddev start &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Une fois cela fait, on peut proc&#233;der &#224; l'installation de &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; (sur sa branche master ici) avec &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;-Cli (il convient de lancer la commande &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;spip&lt;/code&gt; une premi&#232;re fois pour proc&#233;der &#224; son installation)&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;ddev spip ddev spip dl git -b master -d web &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;L&#224;, on tombe sur ce message, auquel il faut r&#233;pondre par l'affirmative&#160;:&lt;/p&gt;
&lt;blockquote class=&#034;spip&#034;&gt;
&lt;p&gt;Le r&#233;pertoire existant web a &#233;t&#233; renomm&#233; en web__OLD. Souhaitez vous le supprimer&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;? (yes/no) [yes]&#160;:&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Puis, on peut poursuivre l'installation, comme indiqu&#233; dans le &lt;span class=&#034;caps&#034;&gt;README&lt;/span&gt; de &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;, en prenant bien soin de faire pr&#233;c&#233;der certaines commandes de &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;ddev&lt;/code&gt;&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;ddev composer install ddev composer local mode-dev rm -rf web/plugins-dist ddev composer local install &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Enfin, il suffit de proc&#233;der &#224; l'installation de &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;, en utilisant les informations de connexion &#224; la base de donn&#233;es retourn&#233;es par la commande &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;describe&lt;/code&gt;&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;ddev describe &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>SPIP-Cli sur serveur mutualis&#233;</title>
		<link>https://www.momh.fr/spip-cli-sur-serveur-mutualise</link>
		<guid isPermaLink="true">https://www.momh.fr/spip-cli-sur-serveur-mutualise</guid>
		<dc:date>2022-04-27T16:24:45Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Brice Boucard</dc:creator>


		<dc:subject>&lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;</dc:subject>
		<dc:subject>webdev</dc:subject>

		<description>
&lt;p&gt;&lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;-Cli est &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;une interface en ligne de commande pour &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;. Sa documentation nous guide parfaitement pour une installation avec un acc&#232;s root ou sudo. Sur un h&#233;bergement mutualis&#233;, avec a minima un acc&#232;s &lt;span class=&#034;caps&#034;&gt;SSH&lt;/span&gt; relativement ouvert, il faut adapter la proc&#233;dure. &lt;br class='autobr' /&gt; Une fois connect&#233; via &lt;span class=&#034;caps&#034;&gt;SSH&lt;/span&gt; &#224; votre serveur, il convient tout d'abord de cr&#233;er un r&#233;pertoire&#160;/.local/bin&#160;: mkdir -p&#160;/.local/bin &lt;br class='autobr' /&gt;
Ensuite, dans ce r&#233;pertoire, on clone le d&#233;p&#244;t de &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;-Cli et on lance l'installation avec composer&#160;(&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.momh.fr/blog" rel="directory"&gt;Blog&lt;/a&gt;

/ 
&lt;a href="https://www.momh.fr/spip" rel="tag"&gt;&lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;&lt;/a&gt;, 
&lt;a href="https://www.momh.fr/webdev" rel="tag"&gt;webdev&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;&lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;-Cli est &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&lt;i&gt;une interface en ligne de commande pour &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;&lt;/i&gt;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;. Sa &lt;a href=&#034;https://contrib.spip.net/SPIP-Cli&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;documentation&lt;/a&gt; nous guide parfaitement pour une installation avec un acc&#232;s root ou sudo. Sur un h&#233;bergement mutualis&#233;, avec a minima un acc&#232;s &lt;span class=&#034;caps&#034;&gt;SSH&lt;/span&gt; relativement ouvert, il faut adapter la proc&#233;dure.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Une fois connect&#233; via &lt;span class=&#034;caps&#034;&gt;SSH&lt;/span&gt; &#224; votre serveur, il convient tout d'abord de cr&#233;er un r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;~/.local/bin&lt;/code&gt;&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;mkdir -p ~/.local/bin &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Ensuite, dans ce r&#233;pertoire, on clone le d&#233;p&#244;t de &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;-Cli et on lance l'installation avec &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;composer&lt;/code&gt; (chez alwaysdata, il faut utiliser &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;composer2&lt;/code&gt;)&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;cd ~/.local/bin/ git clone https://git.spip.net/spip-contrib-outils/spip-cli.git cd spip-cli/ composer install &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Ensuite, ne nous reste plus qu'&#224; cr&#233;er un lien symbolique afin de faciliter l'usage de la commande &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;spip&lt;/code&gt;&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;ln -s /home/$USER/.local/bin/spip-cli/bin/spip /home/$USER/.local/bin/ &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Pour ce qui est de l'autocompl&#233;tion, il suffit d'&#233;diter le fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;~/.profile&lt;/code&gt; ainsi&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;source ~/.local/bin/spip-cli/bin/spip_console_autocomplete &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Une fois Bash relanc&#233;, la commande devrait &#234;tre disponible et l'autompl&#233;tion de ses options fonctionner.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Installer &#171;&#160;globalement&#160;&#187; PHP_CodeSniffer </title>
		<link>https://www.momh.fr/installer-globalement-php_codesniffer</link>
		<guid isPermaLink="true">https://www.momh.fr/installer-globalement-php_codesniffer</guid>
		<dc:date>2022-04-26T20:05:01Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Brice Boucard</dc:creator>


		<dc:subject>webdev</dc:subject>

		<description>
&lt;p&gt;PHP_CodeSniffer est un outil de contr&#244;le de votre code &lt;span class=&#034;caps&#034;&gt;PHP&lt;/span&gt; afin d'en garantir la conformit&#233; au standard de votre choix. Plut&#244;t que de l'installer dans chacun de vos projets, il est possible de l'installer &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;globalement&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; et de le configurer pour permettre d'autres standards que ceux fournis de base, ceux de &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; par exemple. &lt;br class='autobr' /&gt; Pr&#233;alables &lt;br class='autobr' /&gt;
Si vous n'avez pas de r&#233;pertoire&#160;/bin/ dans votre /home, on commence par le cr&#233;er&#160;: bash mkdir&#160;/bin &lt;br class='autobr' /&gt;
Puis, on installe composer de fa&#231;on &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;globale&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;&#160;(&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.momh.fr/blog" rel="directory"&gt;Blog&lt;/a&gt;

/ 
&lt;a href="https://www.momh.fr/webdev" rel="tag"&gt;webdev&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;PHP_CodeSniffer est un outil de contr&#244;le de votre code &lt;span class=&#034;caps&#034;&gt;PHP&lt;/span&gt; afin d'en garantir la conformit&#233; au standard de votre choix.&lt;br class='autobr' /&gt;
Plut&#244;t que de l'installer dans chacun de vos projets, il est possible de l'installer &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;globalement&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; et de le configurer pour permettre d'autres standards que ceux fournis de base, ceux de &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; par exemple.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;spip&#034;&gt;Pr&#233;alables&lt;/h2&gt;
&lt;p&gt;Si vous n'avez pas de r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;~/bin/&lt;/code&gt; dans votre /home, on commence par le cr&#233;er&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;mkdir ~/bin &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Puis, on installe &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;composer&lt;/code&gt; de fa&#231;on &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;globale&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; dans ce r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;~/bin&lt;/code&gt; qui se trouve dans notre $&lt;span class=&#034;caps&#034;&gt;PATH&lt;/span&gt;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;; on commence par suivre les instructions de la documentation de &lt;a href=&#034;https://getcomposer.org/download/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Composer&lt;/a&gt; mais la troisi&#232;me commande devient&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;php composer-setup.php --install-dir=~/bin --filename=composer &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt;Installation de PHP_CodeSniffer&lt;/h2&gt;
&lt;p&gt;Une fois cela fait, on peut installer &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;globalement&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; PHP_CodeSniffer&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;composer global require squizlabs/php_codesniffer composer global require spip/coding-standards &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Par d&#233;faut, chez moi, on retrouve les packages dans &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;~/.config/composer/vendor/&lt;/code&gt; et les ex&#233;cutables dans &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;~/.config/composer/vendor/bin/&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Ne nous reste plus qu'&#224; cr&#233;er des liens symboliques dans notre &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;~/bin/&lt;/code&gt; des ex&#233;cutables de PHP_CodeSniffer&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;ln -s ~/.config/composer/vendor/bin/phpcs ~/bin ln -s ~/.config/composer/vendor/bin/phpcbf ~/bin &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On relance Bash et on peut alors d&#233;clarer le r&#233;pertoire des standards &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; &#224; PHP_CodeSniffer&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;phpcs --config-set installed_paths /home/$USER/.config/composer/vendor/spip/coding-standards/src/,/home/$USER/.config/composer/vendor/phpcompatibility/php-compatibility &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Vous pouvez v&#233;rifier que la configuration est bien correcte en &#233;ditant le fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;~/.config/composer/vendor/squizlabs/php_codesniffer/CodeSniffer.conf&lt;/code&gt;.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Utilisation&lt;/h2&gt;
&lt;p&gt;Il est alors possible de lancer les commandes &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;phpcs&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;phpcbf&lt;/code&gt; o&#249; que vous soyez.&lt;br class='autobr' /&gt;
Il peut alors &#234;tre int&#233;ressant de profiter d'une configuration locale, propre &#224; votre projet&#160;: cela se passe dans le fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;phpcs.xml&lt;/code&gt; plac&#233; &#224; la racine de votre projet&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;xml&#034; class='spip_code spip_code_block language-xml' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;?xml version=&#034;1.0&#034;?&gt; &lt;ruleset&gt; &lt;file&gt;./&lt;/file&gt; &lt;exclude-pattern&gt;**/*.js&lt;/exclude-pattern&gt; &lt;exclude-pattern&gt;**/*.css&lt;/exclude-pattern&gt; &lt;exclude-pattern&gt;**/*.scss&lt;/exclude-pattern&gt; &lt;exclude-pattern&gt;node_modules/*&lt;/exclude-pattern&gt; &lt;exclude-pattern&gt;vendor/*&lt;/exclude-pattern&gt; &lt;arg name=&#034;colors&#034;/&gt; &lt;rule ref=&#034;SPIP40&#034;/&gt; &lt;/ruleset&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Pour d&#233;couvrir plus pr&#233;cis&#233;ment les possibilit&#233;s de configuration, je vous laisse consulter le fichier &lt;a href=&#034;https://github.com/squizlabs/PHP_CodeSniffer/blob/master/phpcs.xml.dist&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;phpcs.xml.dist&lt;/code&gt;&lt;/a&gt; de PHP_CodeSniffer.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Faire cohabiter plusieurs versions de PHP sous Debian</title>
		<link>https://www.momh.fr/faire-cohabiter-plusieurs-versions-de-php-sous-debian</link>
		<guid isPermaLink="true">https://www.momh.fr/faire-cohabiter-plusieurs-versions-de-php-sous-debian</guid>
		<dc:date>2022-03-12T17:58:39Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Brice Boucard</dc:creator>


		<dc:subject>Linux</dc:subject>
		<dc:subject>webdev</dc:subject>

		<description>
&lt;p&gt;Surtout par curiosit&#233;, je me suis pench&#233; sur la possibilit&#233; de faire cohabiter plusieurs versions de &lt;span class=&#034;caps&#034;&gt;PHP&lt;/span&gt; sur ma Debian Bullseye et surtout sur la fa&#231;on de basculer ais&#233;ment de l'une &#224; l'autre. &lt;br class='autobr' /&gt; Installation &lt;br class='autobr' /&gt;
Pour installer plusieurs versions de &lt;span class=&#034;caps&#034;&gt;PHP&lt;/span&gt; conjointement, il faut ajouter le d&#233;p&#244;t Sury&#160;: bash sudo apt update sudo apt -y install apt-transport-https lsb-release ca-certificates curl sudo curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg sudo sh&#160;(&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.momh.fr/blog" rel="directory"&gt;Blog&lt;/a&gt;

/ 
&lt;a href="https://www.momh.fr/linux" rel="tag"&gt;Linux&lt;/a&gt;, 
&lt;a href="https://www.momh.fr/webdev" rel="tag"&gt;webdev&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Surtout par curiosit&#233;, je me suis pench&#233; sur la possibilit&#233; de faire cohabiter plusieurs versions de &lt;span class=&#034;caps&#034;&gt;PHP&lt;/span&gt; sur ma Debian Bullseye et surtout sur la fa&#231;on de basculer ais&#233;ment de l'une &#224; l'autre.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;spip&#034;&gt;Installation&lt;/h2&gt;
&lt;p&gt;Pour installer plusieurs versions de &lt;span class=&#034;caps&#034;&gt;PHP&lt;/span&gt; conjointement, il faut ajouter &lt;a href=&#034;https://deb.sury.org/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;le d&#233;p&#244;t Sury&lt;/a&gt;&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;sudo apt update sudo apt -y install apt-transport-https lsb-release ca-certificates curl sudo curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg sudo sh -c 'echo &#034;deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main&#034; &gt; /etc/apt/sources.list.d/php.list' sudo apt update &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;De l&#224;, il est possible d'installer diverses versions de &lt;span class=&#034;caps&#034;&gt;PHP&lt;/span&gt; et de ses modules&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;; ainsi, sous Bullseye, je me vois proposer les versions 5.6, 7.0, 7.1, 7.2, 7.3, 7.4, 8.0 et 8.1&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;apt search php | grep &#034;php[0-9]\.[0-9]/&#034; [...] php5.6/bullseye 5.6.40-57+0~20211119.60+debian11~1.gbp8a9bd1 all php7.0/bullseye 7.0.33-57+0~20211119.61+debian11~1.gbp5d8ba5 all php7.1/bullseye 7.1.33-44+0~20211119.61+debian11~1.gbp448fbe all php7.2/bullseye 7.2.34-28+0~20211119.67+debian11~1.gbpf24e81 all php7.3/bullseye 7.3.33-1+0~20211119.91+debian11~1.gbp618351 all php7.4/stable-security,now 7.4.28-1+deb11u1 all [install&#233;, pouvant &#234;tre supprim&#233; automatiquement] php8.0/bullseye 8.0.16-1+0~20220221.30+debian11~1.gbp8b91a5 all php8.1/bullseye,now 8.1.3-1+0~20220223.13+debian11~1.gbp7757b9 all [install&#233;, automatique] &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt;Changer facilement de version de &lt;span class=&#034;caps&#034;&gt;PHP&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;Afin de faciliter le basculement d'une version &#224; une autre, j'ai compil&#233; diff&#233;rentes sources pour finalement produire un petit script, tr&#232;s certainement imparfait, qui permet de choisir de mani&#232;re interactive parmi les versions de &lt;span class=&#034;caps&#034;&gt;PHP&lt;/span&gt; install&#233;es celle &#224; utiliser.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;touch ~/bin/php-switch chmod +x ~/bin/php-switch nano ~/bin/php-switch &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;#!/bin/bash # based on https://askubuntu.com/a/883140 # and on https://stackoverflow.com/a/68905711 # D&#233;terminer la version de PHP actuellement utilis&#233;e par Apache VAR=$(ls /etc/apache2/mods-enabled/php*) IFS=' ' read -r -a array &lt;&lt;&lt; &#034;$VAR&#034; array[0]=${array[0]#*php} array[0]=${array[0]%.conf} OLDVERSION=${array[0]} echo &#034;La version de PHP actuellement utilis&#233;e est la&#034; $OLDVERSION. echo &#034;Liste des versions de PHP disponibles :&#034; # Lister les versions de PHP install&#233;es RAWPOSSIBILITIES=$(update-alternatives --list php | sed 's/.*\(...\)/\1/') POSSIBILITIES=($RAWPOSSIBILITIES) # Demander la version de PHP &#224; activer PS3='Choisissez la version de PHP &#224; activer : ' select opt in &#034;${POSSIBILITIES[@]}&#034; &#034;Annuler&#034;; do case &#034;$REPLY&#034; in $((${#POSSIBILITIES[@]}+1))) echo &#034;Salut!&#034;; exit;; esac [ $REPLY -gt $((${#POSSIBILITIES[@]}+1)) -o $REPLY -lt 1 ] &amp;&amp; echo &#034;Choix invalide&#034; || break done echo &#034;Activer la version ${POSSIBILITIES[(($REPLY-1))]} ? Entr&#233;e pour valider, Ctrl-C pour annuler.&#034; read x # On reconfigure Apache sudo a2dismod php${OLDVERSION} sudo a2enmod php${POSSIBILITIES[(($REPLY-1))]} # On met &#224; jour la version par d&#233;faut sudo update-alternatives --set php /usr/bin/php${POSSIBILITIES[(($REPLY-1))]} sudo update-alternatives --set phar /usr/bin/phar${POSSIBILITIES[(($REPLY-1))]} sudo update-alternatives --set phar.phar /usr/bin/phar.phar${POSSIBILITIES[(($REPLY-1))]} # On relance le service Apache sudo systemctl restart apache2 &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&#8203;&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Node.js et autocompl&#233;tion avec Tmux</title>
		<link>https://www.momh.fr/node-js-et-autocompletion-avec-tmux</link>
		<guid isPermaLink="true">https://www.momh.fr/node-js-et-autocompletion-avec-tmux</guid>
		<dc:date>2022-02-22T21:12:10Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Brice Boucard</dc:creator>


		<dc:subject>webdev</dc:subject>
		<dc:subject>Linux</dc:subject>

		<description>
&lt;p&gt;Si je b&#233;n&#233;ficiais parfaitement de l'autocompl&#233;tion des commandes fournies par node.js dans mon terminal classique, celle-ci ne fonctionnait plus sous Tmux&#160;: une sombre histoire de diff&#233;rence entre interactive shell et login shell. &lt;br class='autobr' /&gt; Mon .bashrc contenait pourtant bien le code n&#233;cessaire mais, au-del&#224; de l'autocompl&#233;tion de node.js, il ne semblait pas du tout &#234;tre lu, puisque m&#234;me mon invite de commande ne correspondait pas &#224; celle configur&#233;e... &lt;br class='autobr' /&gt;
Cependant, mes recherches se focalisaient&#160;(&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.momh.fr/blog" rel="directory"&gt;Blog&lt;/a&gt;

/ 
&lt;a href="https://www.momh.fr/webdev" rel="tag"&gt;webdev&lt;/a&gt;, 
&lt;a href="https://www.momh.fr/linux" rel="tag"&gt;Linux&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Si je b&#233;n&#233;ficiais parfaitement de l'autocompl&#233;tion des commandes fournies par node.js dans mon terminal classique, celle-ci ne fonctionnait plus sous Tmux&#160;: une sombre histoire de diff&#233;rence entre &lt;i&gt;interactive&lt;/i&gt; shell et &lt;i&gt;login&lt;/i&gt; shell.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Mon &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;.bashrc&lt;/code&gt; contenait pourtant bien le code n&#233;cessaire mais, au-del&#224; de l'autocompl&#233;tion de node.js, il ne semblait pas du tout &#234;tre lu, puisque m&#234;me mon invite de commande ne correspondait pas &#224; celle configur&#233;e...&lt;/p&gt;
&lt;p&gt;Cependant, mes recherches se focalisaient sur le probl&#232;me de l'autocompl&#233;tion de node.js et ne me fournissaient gu&#232;re de solution... C'est en changeant de perspective que je suis tomb&#233; sur &lt;a href=&#034;https://unix.stackexchange.com/questions/320465/new-tmux-sessions-do-not-source-bashrc-file&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;le sujet &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;New tmux sessions do not source bashrc file&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; sur Stack Exchange&lt;/a&gt; et surtout sur &lt;a href=&#034;https://unix.stackexchange.com/a/541352&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;la r&#233;ponse tr&#232;s compl&#232;te de Simba&lt;/a&gt; qui pr&#233;sente donc la diff&#233;rence entre les &lt;i&gt;interactiven non-login shells&lt;/i&gt; &#8212; qui sourcent le fichier .bashrc &#8212; et les &lt;i&gt;login shells&lt;/i&gt; &#8212; qui sourcent quant &#224; eux les fichiers .profile et .bash_profile notamment.&lt;/p&gt;
&lt;p&gt;Deux solutions sont alors possibles&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; soit on &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;source&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; le fichier .bashrc depuis l'un de ces deux derniers fichiers &#8212; cette solution &#233;tant celle que recommande Simba justement&#160;:
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;# if running bash if [ -n &#034;$BASH_VERSION&#034; ]; then # include .bashrc if it exists if [ -f &#034;$HOME/.bashrc&#034; ]; then . &#034;$HOME/.bashrc&#034; fi fi &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt; soit on &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;int&#232;gre&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; l'autocompl&#233;tion de node.js dans le fichier .profile avec la simple commande&#160;:
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;npm completion &gt;&gt; ~/.profile &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Tailwind CSS, PostCSS et SCSS</title>
		<link>https://www.momh.fr/tailwind-css-postcss-et-scss</link>
		<guid isPermaLink="true">https://www.momh.fr/tailwind-css-postcss-et-scss</guid>
		<dc:date>2021-12-22T20:39:00Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Brice Boucard</dc:creator>


		<dc:subject>webdev</dc:subject>

		<description>
&lt;p&gt;&#192; l'occasion de la &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;collection automne 2021&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; de momh.fr, je me suis essay&#233; &#224; Tailwind &lt;span class=&#034;caps&#034;&gt;CSS&lt;/span&gt;, le framework &lt;span class=&#034;caps&#034;&gt;CSS&lt;/span&gt; qui renverse l'habituel mantra du &lt;span class=&#034;caps&#034;&gt;CSS&lt;/span&gt; des classes s&#233;mantiques. Il m'a fallu un peu de temps avant de trouver une configuration satisfaisante, d&#233;couvrant &#224; cette occasion le postprocesseur &lt;span class=&#034;caps&#034;&gt;CSS&lt;/span&gt; PostCSS. &lt;br class='autobr' /&gt; Il faut commencer par installer nodejs et son gestionnaire de paquets npm&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;; plut&#244;t que de passer par les d&#233;p&#244;ts Debian, on utilise les paquets propos&#233;s par NodeSource comme&#160;(&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.momh.fr/blog" rel="directory"&gt;Blog&lt;/a&gt;

/ 
&lt;a href="https://www.momh.fr/webdev" rel="tag"&gt;webdev&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;&#192; l'occasion de la &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;collection automne 2021&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; de momh.fr, je me suis essay&#233; &#224; Tailwind &lt;span class=&#034;caps&#034;&gt;CSS&lt;/span&gt;, le framework &lt;span class=&#034;caps&#034;&gt;CSS&lt;/span&gt; qui renverse l'habituel mantra du &lt;span class=&#034;caps&#034;&gt;CSS&lt;/span&gt; des classes s&#233;mantiques. Il m'a fallu un peu de temps avant de trouver une configuration satisfaisante, d&#233;couvrant &#224; cette occasion le postprocesseur &lt;span class=&#034;caps&#034;&gt;CSS&lt;/span&gt; PostCSS.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Il faut commencer par installer &lt;i&gt;nodejs&lt;/i&gt; et son gestionnaire de paquets &lt;i&gt;npm&lt;/i&gt;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;; plut&#244;t que de passer par les d&#233;p&#244;ts Debian, on utilise les paquets propos&#233;s par &lt;a href=&#034;https://github.com/nodesource/distributions/blob/master/README.md&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;NodeSource&lt;/a&gt; comme recommand&#233; par &lt;a href=&#034;https://nodejs.org/en/download/package-manager/#debian-and-ubuntu-based-linux-distributions&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;la documentation de Node.js&lt;/a&gt;. Ainsi&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;curl -fsSL https://deb.nodesource.com/setup_17.x | sudo -E bash - sudo apt-get install -y nodejs npm &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;on peut commencer par initier un projet avec la commande &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;npm init&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Ensuite, il faut installer les paquets n&#233;cessaires&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;npm install -D tailwindcss postcss postcss-cli postcss-easy-import autoprefixer cssnano watch &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On g&#233;n&#232;re ensuite automatiquement les fichiers de configuration minimalistes de PostCSS et de Tailwind &lt;span class=&#034;caps&#034;&gt;CSS&lt;/span&gt; avec la commande suivante&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;npx tailwindcss init -p &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On peut ensuite &#233;diter les fichiers &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;tailwind.config.js&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;postcss.config.js&lt;/code&gt;, &#233;tant donn&#233; une arborescence comme celle qui suit&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;|_ content |_ truc.html |_ machin.html |_ css |_ src |_ _base.scss |_ _cards.scss |_ tailwind.scss |_ tailwind.css |_ inclure |_ inclusion.html |_ script.js |_ index.html &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On commence par peaufiner la configuration de PostCSS&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;nano postcss.config.js &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;js&#034; class='spip_code spip_code_block language-js' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;module.exports = { plugins: { 'postcss-easy-import': { path: ['./css/src'], prefix: '_', extensions: ['.css', '.scss'] }, 'tailwindcss/nesting': {}, tailwindcss: {}, autoprefixer: {}, ...(process.env.NODE_ENV === 'production' ? { cssnano: {} } : {}) } } &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Puis on s'attelle &#224; la configuration de Tailwind &lt;span class=&#034;caps&#034;&gt;CSS&lt;/span&gt;&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;nano tailwind.config.js&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;js&#034; class='spip_code spip_code_block language-js' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;const defaultTheme = require('tailwindcss/defaultTheme') module.exports = { content: [ &#034;./*.{html,js}&#034;, &#034;./content/*.{html,js}&#034;, &#034;./inclure/*.{html,js}&#034;, ], theme: { screens: { 'xs': '480px', ...defaultTheme.screens, }, extend: { fontFamily: { 'cursive': ['Life Savers', 'cursive'], }, }, }, plugins: [], } &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On peut ensuite modifier la section &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;script&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; du fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;package.json&lt;/code&gt; avec les commandes permettant de compiler nos styles gr&#226;ce &#224; la commande &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;npm run-script XXX&lt;/code&gt;&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;json&#034; class='spip_code spip_code_block language-json' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; &#034;scripts&#034;: { &#034;styles:dev&#034;: &#034;postcss css/src/tailwind.scss -o css/tailwind.css&#034;, &#034;styles:prod&#034;: &#034;NODE_ENV=production postcss css/src/tailwind.scss -o css/tailwind.css&#034;, &#034;styles:watch&#034;: &#034;watch 'npm run dev:scss' ../squelettes/&#034;, }, &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Prism, une aide &#224; l'&#233;dition pour SPIP</title>
		<link>https://www.momh.fr/prism-une-aide-a-l-edition-pour-spip</link>
		<guid isPermaLink="true">https://www.momh.fr/prism-une-aide-a-l-edition-pour-spip</guid>
		<dc:date>2021-05-23T12:30:00Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Brice Boucard</dc:creator>


		<dc:subject>webdev</dc:subject>
		<dc:subject>&lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;</dc:subject>

		<description>
&lt;p&gt;Prism est un plugin pour &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; visant &#224; faciliter l'&#233;dition des contenus en ajoutant la coloration syntaxique aux raccourcis typographiques. &lt;br class='autobr' /&gt; S'appuyant sur les librairies d&#233;velopp&#233;es par Lea Verou PrismJS et Prism Live, le plugin Prism, disponible sur git.spip.net, propose donc une coloration syntaxique des raccourcis &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; sur tous les textarea` (les champs longs de saisie) dot&#233;s d'une barre d'&#233;dition, c'est-&#224;-dire o&#249; le Porte-plume est charg&#233; (par d&#233;faut ou gr&#226;ce au plugin Porte -plume&#160;(&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.momh.fr/blog" rel="directory"&gt;Blog&lt;/a&gt;

/ 
&lt;a href="https://www.momh.fr/webdev" rel="tag"&gt;webdev&lt;/a&gt;, 
&lt;a href="https://www.momh.fr/spip" rel="tag"&gt;&lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Prism est un plugin pour &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; visant &#224; faciliter l'&#233;dition des contenus en ajoutant la coloration syntaxique aux raccourcis typographiques.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;S'appuyant sur les librairies d&#233;velopp&#233;es par Lea Verou &lt;a href=&#034;https://prismjs.com/index.html&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;PrismJS&lt;/a&gt; et &lt;a href=&#034;https://live.prismjs.com/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Prism Live&lt;/a&gt;, le plugin Prism, disponible sur &lt;a href=&#034;https://git.spip.net/spip-contrib-extensions/prism&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;git.spip.net&lt;/a&gt;, propose donc une coloration syntaxique des raccourcis &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; sur tous les &lt;code class=&#034;language-html&#034;&gt;textarea` (les champs longs de saisie) dot&#233;s d'une barre d'&#233;dition, c'est-&#224;-dire o&#249; le Porte-plume est charg&#233; (par d&#233;faut ou gr&#226;ce au &lt;a href=&#034;https://plugins.spip.net/ppp.html&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;plugin Porte -plume partout&lt;/a&gt;).&lt;/p&gt;
&lt;div class='spip_document_112 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://www.momh.fr/IMG/png/prism.png' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/png&#034;&gt; &lt;img src='https://www.momh.fr/local/cache-vignettes/L500xH246/prism-bfe08.png?1725216335' width='500' height='246' alt='' /&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Il convient de noter que Prism propose la coloration syntaxique et des raccourcis typographiques propres &#224; &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; et la syntaxe Markdown, lorsque &lt;a href=&#034;https://plugins.spip.net/markdown.html&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;le plugin Markdown&lt;/a&gt; est actif et configur&#233; pour appliquer la syntaxe Markdown par d&#233;faut.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>mycli&#160;: autocompl&#233;tion et coloration syntaxique pour MySQL</title>
		<link>https://www.momh.fr/mycli-autocompletion-et-coloration-syntaxique-pour-mysql</link>
		<guid isPermaLink="true">https://www.momh.fr/mycli-autocompletion-et-coloration-syntaxique-pour-mysql</guid>
		<dc:date>2021-04-20T05:27:00Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Brice Boucard</dc:creator>


		<dc:subject>webdev</dc:subject>
		<dc:subject>terminal</dc:subject>

		<description>
&lt;p&gt;Qu'il est laborieux de saisir des commandes MySQL dans son terminal, sans coloration syntaxique et surtout sans autocompl&#233;tion... La solution&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;? mycli&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;! &lt;br class='autobr' /&gt; &#201;crit en Python, mycli est une interface en ligne de commandes &lt;br class='autobr' /&gt;
pour MySQL ou MariaDB notamment qui facilite grandement la saisie gr&#226;ce &#224; la coloration syntaxique et gr&#226;ce surtout &#224; l'autocompl&#233;tion. &lt;br class='autobr' /&gt;
Pour l'installer, rien de plus simple sous Debian&#160;: sudo apt install mycli &lt;br class='autobr' /&gt;
Il est aussi possible d'utiliser l'utilitaire Python pip&#160;:&#160;(&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.momh.fr/blog" rel="directory"&gt;Blog&lt;/a&gt;

/ 
&lt;a href="https://www.momh.fr/webdev" rel="tag"&gt;webdev&lt;/a&gt;, 
&lt;a href="https://www.momh.fr/terminal" rel="tag"&gt;terminal&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Qu'il est laborieux de saisir des commandes MySQL dans son terminal, sans coloration syntaxique et surtout sans autocompl&#233;tion... La solution&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;? mycli&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;!&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;&#201;crit en Python, &lt;a href=&#034;https://www.mycli.net/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;mycli&lt;/a&gt; est une interface en ligne de commandes &lt;br class='autobr' /&gt;
pour MySQL ou MariaDB notamment qui facilite grandement la saisie gr&#226;ce &#224; la coloration syntaxique et gr&#226;ce surtout &#224; l'autocompl&#233;tion.&lt;/p&gt;
&lt;div class='spip_document_110 spip_document spip_documents spip_document_image spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;55&#034; data-legende-lenx=&#034;x&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://www.momh.fr/local/cache-vignettes/L500xH362/main-e4bf9685-a06ae.png?1729482603' width='500' height='362' alt='' /&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre '&gt;&lt;strong&gt;D&#233;monstration de mycli
&lt;/strong&gt;&lt;/div&gt; &lt;div class='spip_doc_credits '&gt;&lt;a href=&#034;https://github.com/dbcli/mycli&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://github.com/dbcli/mycli&lt;/a&gt;
&lt;/div&gt;
&lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Pour l'installer, rien de plus simple sous Debian&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;sudo apt install mycli &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Il est aussi possible d'utiliser l'utilitaire Python &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;pip&lt;/code&gt;&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;sudo pip install -U mycli &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Pour le lancer, il suffit de lancer la commande &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;mycli&lt;/code&gt; avec pour argument une base de donn&#233;e, un utilisateur... Exemples&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;mycli my_database mycli -u user mycli -u user -h host my_database &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>SCSS &amp; Gulp</title>
		<link>https://www.momh.fr/scss-gulp</link>
		<guid isPermaLink="true">https://www.momh.fr/scss-gulp</guid>
		<dc:date>2021-03-31T05:45:00Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Brice Boucard</dc:creator>


		<dc:subject>webdev</dc:subject>

		<description>
&lt;p&gt;Je me suis mis &#224; utiliser le pr&#233;processeur &lt;span class=&#034;caps&#034;&gt;CSS&lt;/span&gt; Sass avec sa syntaxe &lt;span class=&#034;caps&#034;&gt;SCSS&lt;/span&gt; il y a quelques ann&#233;es, le mobilisant de temps en temps, au gr&#233; des diff&#233;rentes refontes de ce site. Plus r&#233;cemment, j'ai cherch&#233; &#224; automatiser un certain nombre de t&#226;ches r&#233;p&#233;titives (compilation, minification, autoprefixer...) avec Gulp. &lt;br class='autobr' /&gt; Ainsi, jusqu'&#224; r&#233;cemment, je faisais en sorte que mon &#233;diteur de code (jusqu'alors Sublime Text avec le plugin Autoprefixer), ajoute les propri&#233;t&#233;s propre &#224; chaque navigateur &#224;&#160;(&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.momh.fr/blog" rel="directory"&gt;Blog&lt;/a&gt;

/ 
&lt;a href="https://www.momh.fr/webdev" rel="tag"&gt;webdev&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Je me suis mis &#224; utiliser le pr&#233;processeur &lt;span class=&#034;caps&#034;&gt;CSS&lt;/span&gt; Sass avec sa syntaxe &lt;span class=&#034;caps&#034;&gt;SCSS&lt;/span&gt; il y a quelques ann&#233;es, le mobilisant de temps en temps, au gr&#233; des diff&#233;rentes refontes de ce site. Plus r&#233;cemment, j'ai cherch&#233; &#224; automatiser un certain nombre de t&#226;ches r&#233;p&#233;titives (compilation, minification, autoprefixer...) avec Gulp.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Ainsi, jusqu'&#224; r&#233;cemment, je faisais en sorte que mon &#233;diteur de code (jusqu'alors Sublime Text avec le plugin &lt;a href=&#034;https://packagecontrol.io/packages/Autoprefixer&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Autoprefixer&lt;/a&gt;), ajoute les propri&#233;t&#233;s propre &#224; chaque navigateur &#224; l'enregistrement du fichier sur lequel je travaillais. Je n'avais ensuite plus qu'&#224; lancer la compilation de mon &lt;span class=&#034;caps&#034;&gt;SCSS&lt;/span&gt; avec la commande classique &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;sass&lt;/code&gt;&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;sass -s compressed style.scss style.css &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Mais, travaillant &#224; un projet qui n&#233;cessitait aussi de manipuler du JavaScript (de le minifier essentiellement), j'ai cherch&#233; &#224; rationaliser et automatiser tout un tas de petites actions avec &#8212; rien de bien surprenant &#8212; le bien connu &lt;a href=&#034;https://gulpjs.com/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Gulp&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Voici donc le &lt;i&gt;gulpfile.js&lt;/i&gt; que je m'&#233;tais concoct&#233; pour compiler mon &lt;span class=&#034;caps&#034;&gt;SCSS&lt;/span&gt;, minifier le JavaScript et surveiller la modification des fichiers pour automatiser ces t&#226;ches.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;js&#034; class='spip_code spip_code_block language-js' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;const gulp = require('gulp'), sass = require('gulp-sass'), cleancss = require('gulp-clean-css'), rename = require('gulp-rename'), autoprefixer = require('gulp-autoprefixer'), sourcemaps = require('gulp-sourcemaps'), concat = require('gulp-concat'), minify = require('gulp-minify'); var sources = { scss: ['css/src/**/*.s*ss'], scss_main: ['css/src/main.scss'], js: ['js/src/**/*.js'] }; var dests = { css: 'css/', js: 'js/' } function watch() { gulp.watch(sources.scss, styles); gulp.watch(sources.js, scripts); } function styles() { return gulp.src(sources.scss_main) .pipe(sourcemaps.init()) .pipe(sass({ outputStyle: 'compact', precision: 10 }).on('error', sass.logError) ) .pipe(autoprefixer()) .pipe(cleancss()) .pipe(rename({ suffix: '.min' })) .pipe(sourcemaps.write('')) .pipe(gulp.dest(dests.css)); } function scripts () { return gulp.src(sources.js) .pipe(concat('scripts.js')) .pipe(gulp.dest(dests.js)) .pipe(minify( {ext:{ min:'.min.js' }} )) .pipe(gulp.dest(dests.js)); } exports.watch = watch; exports.styles = styles; exports.scripts = scripts; exports.default = styles; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Avant de s'en servir, il faut bien &#233;videmment installer les modules Node.js qui vont bien&#160;:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;npm install --save-dev gulp gulp-autoprefixer gulp-clean-css gulp-concat gulp-minify gulp-rename gulp-sass gulp-sourcemaps &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Il suffit ensuite de lancer la commande &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;gulp&lt;/code&gt; suivie de la fonction souhait&#233;e.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>



</channel>

</rss>
