140 votes

Comment puis-je déployer des applications Node.js sous la forme d'un seul fichier exécutable ?

Supposons que j'ai écrit une application Node.js, et que je souhaite maintenant la distribuer. Bien sûr, je veux que ce soit facile pour l'utilisateur, donc je ne veux pas qu'il installe Node.js, exécute npm install puis tapez manuellement node app.js .

Ce que je préfèrerais, c'est un seul fichier exécutable, par exemple une .exe sous Windows.

Comment pourrais-je aborder cette question ?

Je suis conscient de este hilo De toute façon, il ne s'agit que de Windows. Comment pourrais-je réaliser cela d'une manière indépendante de la plateforme ? Avez-vous des idées ? Les meilleures pratiques ? ... ?

La solution idéale était un "compilateur" auquel je pouvais donner un dossier source. Le dossier source contient l'application elle-même dans différents .js les fichiers node_modules et certaines métadonnées, telles que le nom de l'utilisateur. package.json . Le résultat devrait être des binaires pour diverses plateformes, telles que Windows, OS X et Linux.

Oh, et ce qui est important : je ne veux pas faire tout des modifications du code source, de sorte que les appels à require avec des chemins relatifs devraient toujours fonctionner, 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 indépendamment, il doit être inclus dans l'exécutable également.

1 votes

S'agit-il d'une application web ? (ce qui signifie que l'interface utilisateur est basée sur le Web) ou une application en ligne de commande plus simple qui fait autre chose ? Je soupçonne que cela devient beaucoup plus difficile si vous avez besoin de faire apparaître un navigateur de quelque sorte.

7 votes

Nombre de membres de la communauté node.js qui se déploient sur des OS unix de cette manière : zéro. Êtes-vous sûr que les approches éprouvées comme une archive tar, deb ou rpm ne sont pas acceptables pour vous ? Êtes-vous en train d'inventer un problème à résoudre qui n'existe pas vraiment ?

1 votes

Alex Wayne : C'est une application côté serveur, donc pas besoin de lancer un navigateur.

67voto

Golo Roden Points 10272

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

C'est ce qui se rapproche le plus d'une solution idéale.

13 votes

Selon la documentation, nexe supporte maintenant Windows :)

1 votes

J'ai regroupé mon application nodeJS et j'ai obtenu cette erreur : Erreur : ENOENT, no such file or directory '..../release/types/mime.types' J'ai regardé le dossier release, le dossier types/mime.types n'a jamais été créé. Quelqu'un a-t-il une idée ?

1 votes

En tant que mainteneur actuel de nexe, les modules natifs sont en cours depuis un certain temps maintenant, et soyez assurés qu'ils seront bientôt implémentés !

31voto

Frederic Points 952

Tout d'abord, nous parlons de l'empaquetage d'une application Node.js pour les ateliers, les démonstrations, etc. où il peut être pratique d'avoir une application qui "tourne" sans que l'utilisateur final ait besoin de 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 le package.json) au local répertoire node_modules. Il est important d'effectuer cette étape sur chaque plateforme que vous souhaitez prendre en charge séparément, en cas de dépendances binaires.
  3. Copiez le binaire Node.js - node.exe sous Windows, (probablement) /usr/local/bin/node sur OS X/Linux dans le dossier racine de votre projet. Sur OS X/Linux vous pouvez trouver l'emplacement du binaire Node.js avec which node .

Pour Windows :
Créez une archive auto-extractible, 7zip_extra supporte un moyen d'exécuter une commande juste après l'extraction, voir : http://www.msfn.org/board/topic/39048-how-to-make-a-7-zip-switchless-installer/ .

Pour OS X/Linux :
Vous pouvez utiliser des outils comme se fait o unzipsfx (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 ex. node app.js ) et supprimez tous les fichiers lorsque vous avez terminé.

1 votes

Ce type de conditionnement est-il légal selon la licence nodejs ?

15voto

Jason Nichols Points 1361

Sans vouloir battre un cheval mort, la solution que vous décrivez ressemble beaucoup à ce qui suit Node-Webkit .

Depuis la page Git :

node-webkit est un moteur 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 depuis le DOM et offre une nouvelle façon d'écrire des applications natives avec toutes les technologies Web.

Ces instructions détaillent 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 ça semble assez proche.

J'espère que cela vous aidera !

2 votes

Node-Webkit est tout simplement fantastique, surtout pour faire la démonstration d'une solution Node.js, vous avez tout ce dont vous avez besoin en un seul endroit.

2 votes

Le cadre electron est également bon. Mais nwjs et electron sont tous deux axés sur les applications centrées sur l'interface utilisateur. Le conditionnement d'une application serveur est probablement possible, mais ce n'est pas un cas d'utilisation typique. D'après mon expérience, il est plus difficile de cacher l'interface utilisateur et de l'exécuter à partir du CLI.

0 votes

L'emballage de Nodewebkit est-il légal selon la licence nodejs ?

7voto

Nakedible Points 1616

En plus de nexe, browserify peut être utilisé pour regrouper toutes vos dépendances dans un seul et même fichier .js fichier. Il ne regroupe pas l'exécutable node réel, il ne gère que le côté javascript. Il ne gère pas non plus les modules natifs. Les options de la ligne de commande pour la compilation pure de node sont les suivantes browserify --output bundle.js --bare --dg false input.js .

0 votes

Je l'utilise comme ceci : browserify --bare input.js > output.js

6voto

CoolAJ86 Points 19341

La création d'un programme d'installation comporte un certain nombre d'étapes, qui varient selon le système d'exploitation. Par exemple :

0 votes

Les liens ici sont subtilement cassés. Si vous enlevez le préfixe "blog.", ils fonctionnent, par exemple : coolaj86.com/articles/how-to-create-an-innosetup-installer.html

0 votes

@Wyck noté et corrigé

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X