Comment emballer et déployer l’application Web Node.js + express?

Je suis nouveau dans la programmation de Node.js et j’ai récemment créé un exemple d’application Web fonctionnant avec (express, backbone et autres technologies de vue complémentaires, avec mongoDB). Maintenant, je suis à un point où je veux déployer la même chose dans un environnement de transfert et je ne sais pas comment emballer cette application et la dissortingbuer. [Je peux m’occuper de mongoDb et l’installer séparément]

Je suis originaire du monde Java et nous y créons des fichiers JAR pour des bibliothèques réutilisables et des paquets war / ear pour les applications Web déployées dans un conteneur de servlets. Maintenant, dans ce cas, puisque node.js lui-même agit également comme un conteneur Web, comment puis-je emballer mon application Web?

  1. Existe-t-il un format / des lignes direcsortingces standard pour les applications Web de noeud de packaging construites avec express? (Existe-t-il un système d’emballage jar / war similaire pour les applications de noeud?)
  2. Comment puis-je le déployer une fois empaqueté? Est-ce que ça deviendrait un exe, puisque c’est aussi son propre conteneur?

PS: Pour le moment, je pense à copier manuellement tous les fichiers sources requirejs dans l’environnement de transfert et à exécuter les commandes npm pour télécharger toutes les dépendances sur cette machine, puis utiliser ‘forever’ ou un autre mécanisme pour exécuter mon server.js. (Aussi, ajoutez une sorte de surveillance, juste au cas où l’application se bloque et échoue pour toujours) Je ne suis pas sûr que ce soit la bonne façon? Je suis sûr qu’il doit y avoir un moyen normalisé de résoudre ce problème.

Il n’y a pas de méthode standardisée, mais vous êtes sur la bonne voie. Si votre package.json est à jour et bien tenu, vous pouvez simplement copier / zip / cloner le répertoire de votre application sur le système de production, à l’exclusion des node_modules .

Sur votre système de production, exécutez npm install pour installer vos dépendances, npm test si vous avez des tests et enfin NODE_ENV=production node server.js

On peut trouver ici quelques diapositives récentes que j’ai jugées très utiles et qui traitent également des emballages comme jamais auparavant.

Le déploiement d’applications Node.js est très simple. Dans maven, il y a pom.xml . Le concept associé dans Node.js est package.json . Vous pouvez indiquer vos dépendances sur package.json . Vous pouvez également configurer l’environnement sur package.json . Par exemple, dans l’environnement de développement, vous pouvez dire que

Je veux exécuter des tests unitaires.

mais en production;

Je veux sauter des tests unitaires.

Vous avez des référentiels locaux pour .m2 sous le dossier .m2 . Dans Node.js, il existe node_modules dossier node_modules dans votre projet Node.js. Vous pouvez voir les dossiers de module avec son nom.

Allons à la partie grunt de cette réponse. Grunt est un gestionnaire de tâches pour vos ressources frontales, html, javascript, css. Par exemple, avant le déploiement, vous pouvez minimiser les images HTML, CSS, JavaScript même. Vous pouvez également mettre des fonctions d’exécution de tâches package.json dans package.json .

Si vous souhaitez consulter un exemple d’application, vous pouvez trouver un exemple d’application de blog ici . Vérifiez la structure du dossier et package.json pour référence.

Pour le déploiement, je vous suggère un déploiement Heroku pour les applications de démarrage. Vous pouvez trouver comment faire ici . C’est un déploiement simple basé sur git.

Sur la partie exécutant le projet, définissez simplement votre environnement NODE_ENV=development et node app.js Ici, app.js est dans votre projet.

Voici le concept relatif pour java et nodejs;

  1. maven clean install => npm install
  2. .m2 folder => node_modules (sous le dossier du projet)
  3. mvn test => npm test (section test sur package.json )
  4. junit , powermock , … => powermock , unité de nœud , …
  5. Spring MVC => Express.JS
  6. pom.xml => package.json
  7. import package => require('module_name')
  1. Existe-t-il un format / des lignes direcsortingces standard pour les applications Web de noeud de packaging construites avec express? (Existe-t-il un système d’emballage jar / war similaire pour les applications de noeud?)

Oui, la spécification CommonJS Packages :

Cette spécification décrit le format de package CommonJS pour la dissortingbution des programmes CommonJS et des bibliothèques. Un package CommonJS est un regroupement cohérent d’une collection de modules, de codes et d’autres actifs en un seul formulaire. Il fournit la base pour la livraison, l’installation et la gestion pratiques des composants CommonJS.

Pour votre prochaine question:

2. Comment puis-je le déployer une fois empaqueté? Est-ce que ça deviendrait un exe, puisque c’est aussi son propre conteneur?

J’appuie la suggestion de Hüseyin de se déployer sur Heroku pour la production. Pour le développement et le staging, j’utilise respectivement Node-Appliance avec VirtualBox et Amazon EC2:

Ce programme prend une machine Debian construite par build-debian-cloud ou Debian-VirtualBox-Appliance et la transforme en une “appliance” Node.js, capable d’exécuter une application Node déployée via git.

Votre webapp ne deviendra pas un exe .

quelques manières d’aborder ceci:

  • Insérez votre code dans le référentiel Git, en excluant tout ce qui ne correspond pas à votre code ( node_modules/** ), puis node_modules/** dans votre environnement de npm install , exécutez npm install pour restaurer toutes les dépendances.

  • créer un paquet NPM à partir de celui-ci, l’installer via npm dans votre environnement de transfert (cela devrait également prendre en compte toutes les dépendances)

  • Copier manuellement des fichiers ssh dans votre environnement de transfert (cela peut être automatisé avec Grunt ), plutôt que de restaurer vos dépendances via npm