web-dev-qa-db-fra.com

Comment déployer les applications Node.js en tant que fichier exécutable unique?

Supposons avoir écrit une application Node.js, et j'aimerais maintenant le distribuer. Bien sûr, je souhaite simplifier la tâche de l'utilisateur. Par conséquent, je ne souhaite pas qu'il installe Node.js, exécute npm install, puis saisisse manuellement node app.js.

Ce que je préférerais, c’est un fichier exécutable unique, par exemple. un fichier .exe sous Windows.

Comment pourrais-je aborder cela?

Je suis conscient de ce fil , de toute façon, il ne s'agit que de Windows. Comment pourrais-je y parvenir d'une manière indépendante de la plate-forme? Des idées? Les meilleures pratiques? ...?

La solution idéale était un "compilateur" auquel je peux donner un dossier source. Le dossier source contient l'application elle-même dans divers fichiers .js, le dossier node_modules et des métadonnées, telles que package.json. La sortie doit être binaire pour diverses plates-formes, telles que Windows, OS X et Linux.

Oh, et ce qui est important: je ne veux pas faire de modifications dans le code source. Par conséquent, les appels à require avec des chemins relatifs doivent tout de même fonctionne, même si ce chemin relatif se trouve maintenant dans l’application packagée.

Des idées?

PS: Je ne veux pas que l'utilisateur installe Node.js de manière indépendante, il devrait également être inclus dans l'exécutable.

130
Golo Roden

Entre-temps, j'ai trouvé la solution parfaite (pour moi): nexe , qui crée un seul exécutable à partir d'une application Node.js incluant tous ses modules.

C'est la meilleure chose à faire pour une solution idéale.

57
Golo Roden

Premièrement, nous parlons d’emballer une application Node.js pour des ateliers, des démonstrations, etc. où il peut être pratique d’avoir une application "en cours d’exécution" sans que l’utilisateur final ait à se soucier de l’installation et des dépendances.

Vous pouvez essayer la configuration suivante:

  1. Obtenez le code source de vos applications
  2. npm install toutes les dépendances (via package.json) dans le répertoire local node_modules. Il est important d'effectuer cette étape sur chaque plate-forme que vous souhaitez prendre en charge séparément, en cas de dépendances binaires.
  3. Copiez le fichier binaire Node.js - node.exe sous Windows, (probablement) /usr/local/bin/node sous OS X/Linux dans le dossier racine de votre projet. Sous OS X/Linux, vous pouvez trouver l'emplacement du fichier binaire Node.js avec which node.

Pour Windows:
Créer une archive auto-extractible, 7Zip_extra permet d'exécuter une commande juste après l'extraction, voir: http://www.msfn.org/board/topic/ 39048-comment-faire-un-7-Zip-switchless-installer / .

Pour OS X/Linux:
Vous pouvez utiliser des outils tels que makeelf ou nzipsfx (Je ne sais pas si cela est compilé avec CHEAP_SFX_AUTORUN défini par défaut).

Ces outils extrairont l'archive dans un répertoire temporaire, exécuteront la commande donnée (par exemple, node app.js) et supprimeront tous les fichiers une fois l'opération terminée.

31
Frederic

Ne pas battre un cheval mort, mais la solution que vous décrivez ressemble beaucoup à Node-Webkit .

De la page Git:

node-webkit est un environnement d'application basé sur Chromium et node.js. Vous pouvez écrire des applications natives en HTML et JavaScript avec node-webkit. Il vous permet également d'appeler des modules Node.js directement à partir du DOM et offre une nouvelle façon d'écrire des applications natives avec toutes les technologies Web.

Ces instructions détaille spécifiquement la création d'une application de fichier unique qu'un utilisateur peut exécuter, et cette partie décrit les dépendances externes.

Je ne suis pas sûr que ce soit la solution exacte, mais cela semble assez proche.

J'espère que ça aide!

15
Jason Nichols

JXcore vous permettra de transformer n'importe quelle application nodejs en un seul exécutable, y compris toutes les dépendances, sous Windows, Linux ou Mac OS X.

Voici un lien vers le programme d'installation: https://github.com/jxcore/jxcore-release

Et voici un lien pour savoir comment le configurer: http://jxcore.com/turn-node-applications-into-executables/

Il est très facile à utiliser et je l’ai testé sous Windows 8.1 et Ubuntu 14.04.

Pour votre information: JXcore est un fork de NodeJS, il est donc compatible à 100% avec NodeJS, avec quelques fonctionnalités supplémentaires.

8
Ian Tait

En plus de nexe, browserify peut être utilisé pour regrouper toutes vos dépendances dans un seul fichier .js. Cela ne regroupe pas l'exécutable du nœud réel, mais gère simplement le côté javascript. Lui aussi ne gère pas les modules natifs. Les options de ligne de commande pour la compilation de nœuds purs seraient browserify --output bundle.js --bare --dg false input.js.

6
Nakedible

Vous devez suivre un certain nombre d’étapes pour créer un programme d’installation, qui varie pour chaque système d’exploitation. Par exemple:

5
CoolAJ86

J'ai essayé de me fabriquer et j'ai réussi. pas de problèmes pour le moment. Étapes documentées @ https://www.linkedin.com/Pulse/article/deploying-nodejs-single-executableruntime-amit-gupta

1
Amit Gupta

Vous pouvez créer un référentiel git et configurer un lien vers le référentiel de nœud git en tant que dépendance. Ensuite, tout utilisateur qui clone le référentiel peut également installer le noeud.

#git submodule [--quiet] add [-b branch] [-f|--force]
git submodule add /var/Node-repo.git common

Vous pouvez facilement empaqueter un script pour cloner automatiquement le dépôt Git que vous avez hébergé quelque part et "installer" à partir de celui-ci.

#!/bin/sh
#clone git repo
git clone your-repo.git
0
HarrisonJackson