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.
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.
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:
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.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.
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!
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.
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
.
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:
.pkg
, des instructions sur la procédure à suivre sont disponibles ici: https://coolaj86.com/articles/how-to-create-an-osx-pkg -installer.html.deb
. Vous y trouverez des instructions sur la procédure à suivre ici: https://coolaj86.com/articles/how-to-create-a-debian-installer. html.exe
ou .msi
, il existe des instructions sur la procédure d'utilisation du programme d'installation innosetup ici: https://coolaj86.com/articles/how-to -create-an-innosetup-installer.htmlJ'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
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