<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
  <title>Blogue de Ryan Lahfa</title>
  <subtitle>Essais sur Linux, NixOS, l&#39;infrastructure déterministe et la sécurité.</subtitle>
  <link href="https://ryan.lahfa.xyz/feed-fr.xml" rel="self" />
  <link href="https://ryan.lahfa.xyz/" />
  <updated>2022-03-20T00:00:00Z</updated>
  <id>https://ryan.lahfa.xyz/</id>
  <author>
    <name>Ryan Lahfa</name>
  </author>
  <entry>
    <title>À propos de node-ipc : pour une sortie de l&#39;écosystème Node.js / NPM au profit de Deno</title>
    <link href="https://ryan.lahfa.xyz/fr/posts/2022-03-20-apropos-de-deno/" />
    <updated>2022-03-20T00:00:00Z</updated>
    <id>https://ryan.lahfa.xyz/fr/posts/2022-03-20-apropos-de-deno/</id>
    <content type="html">&lt;h1 id=&quot;node-ipc&quot; tabindex=&quot;-1&quot;&gt;&lt;code&gt;node-ipc&lt;/code&gt;&lt;/h1&gt;
&lt;p&gt;Le « malware » : &lt;a href=&quot;https://github.com/RIAEvangelist/node-ipc/blob/847047cf7f81ab08352038b2204f0e7633449580/dao/ssl-geospec.js&quot;&gt;https://github.com/RIAEvangelist/node-ipc/blob/847047cf7f81ab08352038b2204f0e7633449580/dao/ssl-geospec.js&lt;/a&gt;, i.e. :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;faire une requête à une API de géolocalisation IP avec une clef d&#39;API hardcodée (désormais désactivée) ;&lt;/li&gt;
&lt;li&gt;vérifier si le code du pays est le bon, e.g. (biélo)russie ;&lt;/li&gt;
&lt;li&gt;récursivement réécrire des fichiers&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;le-problme-absence-total-de-contrle-sur-les-dpendances-et-le-code-quils-excutent&quot; tabindex=&quot;-1&quot;&gt;Le problème : absence total de contrôle sur les dépendances et le code qu&#39;ils exécutent&lt;/h1&gt;
&lt;p&gt;Pour faire une rétrospective rapide :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;NPM&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://ryan.lahfa.xyz/fr/posts/2022-03-20-apropos-de-deno/#fn1&quot; id=&quot;fnref1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt; supportait jusqu&#39;à la version 7 les « hook scripts » : &lt;a href=&quot;https://docs.npmjs.com/cli/v7/using-npm/scripts#hook-scripts&quot;&gt;https://docs.npmjs.com/cli/v7/using-npm/scripts#hook-scripts&lt;/a&gt;, i.e. à chaque installation d&#39;une dépendance, du code arbitraire pouvait s&#39;éxécuter.&lt;/li&gt;
&lt;li&gt;Les binaires Node.js jouissent d&#39;une liberté absolue de faire tout ce qu&#39;ils veulent sur le système&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://ryan.lahfa.xyz/fr/posts/2022-03-20-apropos-de-deno/#fn2&quot; id=&quot;fnref2&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;les-mauvais-lves-type&quot; tabindex=&quot;-1&quot;&gt;Les mauvais élèves-type&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;Puppeteer: &lt;a href=&quot;https://github.com/puppeteer/puppeteer/blob/main/install.js#L29-L87&quot;&gt;https://github.com/puppeteer/puppeteer/blob/main/install.js#L29-L87&lt;/a&gt; — utilise le réseau après avoir été installé ;&lt;/li&gt;
&lt;li&gt;ESBuild: &lt;a href=&quot;https://github.com/evanw/esbuild/blob/master/npm/esbuild/package.json&quot;&gt;https://github.com/evanw/esbuild/blob/master/npm/esbuild/package.json&lt;/a&gt; — où est le &lt;code&gt;install.js&lt;/code&gt; ? :-) — aha, &lt;a href=&quot;https://github.com/evanw/esbuild/blob/master/scripts/esbuild.js#L21-L31&quot;&gt;https://github.com/evanw/esbuild/blob/master/scripts/esbuild.js#L21-L31&lt;/a&gt;… Ah, comme d&#39;habitude: &lt;a href=&quot;https://github.com/evanw/esbuild/blob/master/lib/npm/node-install.ts#L97-L98&quot;&gt;https://github.com/evanw/esbuild/blob/master/lib/npm/node-install.ts#L97-L98&lt;/a&gt; :)&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;empaqueter-ce-genre-de-choses-est-trop-difficile&quot; tabindex=&quot;-1&quot;&gt;Empaqueter ce genre de choses est trop difficile&lt;/h1&gt;
&lt;p&gt;Dès que l&#39;on veut faire un déploiement hors-ligne, sécurisé, avec un vrai traçage de la chaîne des dépendances, dépendre indirectement de ces choses, ce qui arrive trivialement dès qu&#39;on utilise de la modernité comme &lt;a href=&quot;https://vitejs.dev/&quot;&gt;Vite&lt;/a&gt; ou &lt;a href=&quot;https://modern-web.dev/docs/test-runner/overview/&quot;&gt;Web Test Runner&lt;/a&gt;, transforme l&#39;expérience en une session de chasse à quel morceau de code s&#39;amuse à faire l&#39;hypothèse d&#39;avoir Internet, un accès en écriture à &lt;code&gt;node_modules&lt;/code&gt;, post-installation.&lt;/p&gt;
&lt;h1 id=&quot;recommenons-zro-deno&quot; tabindex=&quot;-1&quot;&gt;Recommençons à zéro: Deno&lt;/h1&gt;
&lt;p&gt;&lt;a href=&quot;https://deno.land/&quot;&gt;Deno&lt;/a&gt; offre une porte de sortie intéressante, on oublie :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;package.json&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;node_modules&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;l&#39;hypothèse que les APIs systèmes sont autorisés par défaut par l&#39;utilisateur final&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;L&#39;expérience est probablement trop prématuré encore pour certains projets, mais avec des choses comme &lt;a href=&quot;https://esm.sh&quot;&gt;https://esm.sh&lt;/a&gt; et &lt;a href=&quot;https://alephjs.org/&quot;&gt;https://alephjs.org/&lt;/a&gt;, on a quelque chose d&#39;assez impressionnant sur le plan expérience développeur &lt;strong&gt;et&lt;/strong&gt; expérience opérationnel&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://ryan.lahfa.xyz/fr/posts/2022-03-20-apropos-de-deno/#fn3&quot; id=&quot;fnref3&quot;&gt;[3]&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;h1 id=&quot;un-petit-exemple-avec-nix&quot; tabindex=&quot;-1&quot;&gt;Un petit exemple avec Nix&lt;/h1&gt;
&lt;p&gt;Je ne crois pas avoir vu de tutoriels ou d&#39;articles évidents sur comment faire du Nix et du Deno, puisque Deno enlève le modèle &lt;code&gt;package.json&lt;/code&gt;, je propose une petite façon de faire très « bête » avec &lt;a href=&quot;https://alephjs.org&quot;&gt;https://alephjs.org&lt;/a&gt; :&lt;/p&gt;
&lt;h2 id=&quot;tape-1-penser-ses-dpendances&quot; tabindex=&quot;-1&quot;&gt;Étape 1 : penser ses dépendances&lt;/h2&gt;
&lt;p&gt;J&#39;ai pris la voie de la facilité: fixed-output derivations, puisque je peux juste tout télécharger, puis vérifier que ma structure est bonne.&lt;/p&gt;
&lt;pre class=&quot;language-nix&quot;&gt;&lt;code class=&quot;language-nix&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; lib&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; stdenv&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; deno &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  vendorDependencies &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; projectName &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; dependencySrc&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; vendorSha256 &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 
  &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt;
    prefix &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; projectName &lt;span class=&quot;token operator&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;then&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token antiquotation important&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;projectName&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;-&quot;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; drv &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;
    stdenv&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;mkDerivation &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      name &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token antiquotation important&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;prefix&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;deno-vendor-dependencies&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

      outputHashMode &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;recursive&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      outputHashAlgo &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;sha256&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      outputHash &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; vendorSha256&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

      buildInputs &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
        deno
      &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

      DENO_DIR &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;$TMPDIR&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

      src &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; dependencySrc&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      dontUnpack &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

      buildPhase &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;&#39;
        deno vendor $src
      &#39;&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

      installPhase &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;&#39;
        mv vendor $out/
      &#39;&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt;
  drv&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;C&#39;est pas trop mal: 36 lignes, hein? On peut mieux faire certainement :).&lt;/p&gt;
&lt;p&gt;Pour réinventer le &lt;code&gt;package.json&lt;/code&gt;, pas très compliqué:&lt;/p&gt;
&lt;pre class=&quot;language-typescript&quot;&gt;&lt;code class=&quot;language-typescript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;https://deno.land/x/aleph/cli.ts&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;https://deno.land/x/aleph@v0.3.0-beta.19/types.d.ts&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;https://deno.land/x/aleph@v0.3.0-beta.19/framework/core/mod.ts&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;https://deno.land/x/aleph@v0.3.0-beta.19/framework/react/mod.ts&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;default&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; React&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;https://esm.sh/react@17.0.2&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;default&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; ReactDOM&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;https://esm.sh/react-dom@17.0.2&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cela pourrait gagner à être simplifié, probablement.&lt;/p&gt;
&lt;h2 id=&quot;tape-2-relier-ses-dpendances-son-projet&quot; tabindex=&quot;-1&quot;&gt;Étape 2 : relier ses dépendances à son projet&lt;/h2&gt;
&lt;p&gt;C&#39;est l&#39;étape la plus difficile, Deno offre les &lt;a href=&quot;https://deno.land/manual/linking_to_external_code/import_maps/&quot;&gt;import maps&lt;/a&gt;, c&#39;est très malin.&lt;/p&gt;
&lt;p&gt;Je regrette néanmoins l&#39;absence de &lt;strong&gt;plusieurs&lt;/strong&gt; imports maps pour pouvoir proposer des imports maps techniques, e.g. Nix les génère et des imports maps « utilisateur », e.g. mon code source et des alias propres.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://ryan.lahfa.xyz/fr/posts/2022-03-20-apropos-de-deno/#fn4&quot; id=&quot;fnref4&quot;&gt;[4]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Le choix de la facilité encore:&lt;/p&gt;
&lt;pre class=&quot;language-nix&quot;&gt;&lt;code class=&quot;language-nix&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; pkgs &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;nixpkgs&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; lib &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; pkgs&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;lib &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt;
  deno2nix &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; pkgs&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;callPackage &lt;span class=&quot;token url&quot;&gt;./nix/deno2nix.nix&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  vendorDependencies &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; deno2nix&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;vendorDependencies &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    projectName &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;example&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    dependencySrc &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token url&quot;&gt;./src/deps.ts&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    vendorSha256 &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; lib&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;fakeHash&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  shell &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; pkgs&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;mkShell &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    buildInputs &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
      pkgs&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;deno
    &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    shellHook &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;&#39;
      export IMPORT_MAP=&quot;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token antiquotation important&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;vendorDependencies&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;/import_map.json&quot;
    &#39;&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;tape-3-profiter&quot; tabindex=&quot;-1&quot;&gt;Étape 3 : profiter&lt;/h2&gt;
&lt;p&gt;Le framework Aleph propose un binaire Aleph assez bizarrement installé qui reprend les mêmes problématiques que Node.js, hélas.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://ryan.lahfa.xyz/fr/posts/2022-03-20-apropos-de-deno/#fn5&quot; id=&quot;fnref5&quot;&gt;[5]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Du coup, j&#39;ai décidé de pin le CLI moi-même et de tricher avec une réimplementation légère en Bash que j&#39;appelle &lt;code&gt;aleph&lt;/code&gt; sans originalité:&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token shebang important&quot;&gt;#!/usr/bin/env bash&lt;/span&gt;
deno run &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --no-remote &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --allow-env&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;ALEPH_DEV,ALEPH_DEV_PORT &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --allow-run&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;which&lt;/span&gt; deno&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --allow-read&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;/nix/store,&lt;span class=&quot;token environment constant&quot;&gt;$PWD&lt;/span&gt;&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  --import-map&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$IMPORT_MAP&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  https://deno.land/x/aleph/cli.ts &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
  &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;$@&lt;/span&gt;&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Et voilà, je peux lancer mes déploiements et autres, de façon totalement sandboxé, et la seule chose accessible c&#39;est mon working directory &lt;strong&gt;et&lt;/strong&gt; le store Nix.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Je suis tombé assez amoureux de l&#39;approche Deno et j&#39;espère faire plus de choses, notamment explorer en profondeur de meilleures stratégies pour alimenter l&#39;import map, gérer le working directory (plutôt, il faudrait viser les sources, etc.), enfin, sortir de la fixed output derivation avec les lockfiles que Deno peut produire.&lt;/p&gt;
&lt;p&gt;Node.js n&#39;a pas à perdurer, avec &lt;a href=&quot;https://esm.sh&quot;&gt;https://esm.sh&lt;/a&gt; et de l&#39;huile de coude type Nix, on peut sortir presque complètement de la souffrance.&lt;/p&gt;
&lt;hr class=&quot;footnotes-sep&quot;&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn1&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Le package manager defacto sous Node.js &lt;a href=&quot;https://ryan.lahfa.xyz/fr/posts/2022-03-20-apropos-de-deno/#fnref1&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn2&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Remarque: pour les langages interprétés du même genre, c&#39;est pareil, e.g. Python. &lt;a href=&quot;https://ryan.lahfa.xyz/fr/posts/2022-03-20-apropos-de-deno/#fnref2&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn3&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Ceux qui vont déployer, empaqueter, etc. &lt;a href=&quot;https://ryan.lahfa.xyz/fr/posts/2022-03-20-apropos-de-deno/#fnref3&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn4&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;D&#39;ailleurs: les imports maps forment une spécification draft du W3C! c.f. &lt;a href=&quot;https://wicg.github.io/import-maps/&quot;&gt;https://wicg.github.io/import-maps/&lt;/a&gt; ; bon poussée par Google :D &lt;a href=&quot;https://ryan.lahfa.xyz/fr/posts/2022-03-20-apropos-de-deno/#fnref4&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn5&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Bon, on paye le tribut une fois en vrai. &lt;a href=&quot;https://ryan.lahfa.xyz/fr/posts/2022-03-20-apropos-de-deno/#fnref5&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;
</content>
  </entry>
</feed>