Skip to main content

Salut ! Aujourd’hui, je vais te montrer comment transformer ton script Node.js en un exécutable autonome grâce à pkg. Pas de blabla compliqué, juste un tuto simple et chaleureux pour que tu puisses facilement partager ton appli sans demander à tes utilisateurs d’installer Node.js.

1. C’est quoi pkg ?

Imagine que tu puisses emballer ton application Node.js avec tout ce dont elle a besoin, y compris une version de Node intégrée. Eh bien, c’est exactement ce que fait pkg ! Ça rend ton appli super portable et prête à être lancée sur n’importe quel ordinateur, que ce soit sous Windows, macOS ou Linux. Plutôt cool, non ?

2. Ce dont tu as besoin

Avant de commencer, assure-toi d’avoir :

  • Node.js et npm : Vérifie leur installation avec :
    node -v 
    npm -v
  • pkg installé globalement : Si ce n’est pas encore fait, installe-le avec :
    npm install -g pkg

3. Configurer ton projet dans package.json

Pour éviter de te répéter à chaque fois, tu peux centraliser la configuration de pkg dans ton fichier package.json. C’est très pratique ! Voici ce qu’il faut ajouter :

  • bin : Indique le point d’entrée de ton appli (par exemple,« bin »: « index.js »).
  • pkg : La section dédiée pour définir :
    • assets : Les fichiers ou dossiers à inclure (exemple : « assets »: [« public/**/* »]).
    • targets : Les plateformes cibles et la version de Node.js à utiliser (exemple : [« node14-win-x64 », « node14-linux-x64 », « node14-macos-x64 »]).

Exemple complet :

{
  "name": "mon-appli",
  "version": "1.0.0",
  "bin": "index.js",
  "pkg": {
    "assets": [
      "public/**/*"
    ],
    "targets": [
      "node14-win-x64",
      "node14-linux-x64",
      "node14-macos-x64"
    ]
  },
  "scripts": {
    "build": "pkg . --output dist/mon-appli"
  }
}

Petit bonus : grâce à la section scripts, tu pourras lancer la compilation avec simplement npm run build. Pratique, non ?

4. Un exemple simple pour démarrer

Créons un petit projet ensemble. Commence par créer un fichier index.js avec ce contenu :

// index.js
console.log("hello world");

Ce petit script affiche « hello world » dans la console. Dans un vrai projet, tu ajouteras bien sûr toute la logique de ton appli.


5. Compiler ton appli avec pkg

C’est l’heure de passer à l’action !

  1. Place-toi dans le répertoire de ton projet (celui qui contient index.js et package.json).

  2. Lance la compilation. Tu as deux options :

    • En te basant sur package.json :

      pkg .

      Cette commande va lire ta configuration et générer les exécutables pour chaque plateforme que tu as indiquée.

    • En précisant tout en ligne de commande :

      pkg index.js --targets node14-win-x64,node14-linux-x64,node14-macos-x64 --output mon-appli

      Avec –output, tu choisis le nom et l’emplacement de ton exécutable.

  3. Vérifie les fichiers générés dans le dossier courant ou dans le dossier spécifié (par exemple, dist/mon-appli).

Petit conseil : sur Linux ou macOS, n’oublie pas de rendre l’exécutable exécutable avec chmod +x mon-appli.

6. Tester et déployer ton exécutable

Tester ton appli

  • Sur Linux/macOS :
    ./mon-appli-linux
  • Sur Windows : Lance le fichier mon-appli-win.exe en double-cliquant dessus ou via l’invite de commandes.

Si tout se passe bien, tu verras s’afficher :

hello world

7. Quelques limites et alternatives

Même si pkg est super pratique, il y a quelques petites limites à connaître :

  • Imports dynamiques : Les require avec des variables peuvent poser problème. Préfère les imports statiques.
  • Modules natifs : Certains modules qui utilisent du code C/C++ pourraient ne pas fonctionner comme prévu.
  • Taille de l’exécutable : Comme le runtime Node.js est embarqué, l’exécutable peut être un peu volumineux.

Si jamais ces points te posent souci, tu pourras explorer des alternatives comme ncc ou même penser à la containerisation avec Docker.

En Conclusion :

Avec pkg, tu dis adieu aux galères d’installation de Node.js sur chaque machine ! En quelques commandes, ton script se transforme en un exécutable autonome, prêt à tourner sur Windows, macOS ou Linux. Certes, il y a quelques limites – surtout avec les imports dynamiques ou certains modules natifs –, mais pour la majorité de tes projets, c’est la solution idéale pour simplifier la distribution de ton appli. Alors, prêt à compiler et partager ton projet sans prise de tête ? À toi de jouer !