web-dev-qa-db-fra.com

Comment conditionner et déployer l'application Web Node.js + express?

Je suis nouveau dans la programmation Node.js et j'ai récemment créé un exemple d’application Web de travail utilisant (technologies express, dorsale et autres vues complémentaires, avec mongoDB). Maintenant, je suis sur le point de déployer la même chose dans un environnement de transfert et je ne sais pas comment mettre en package cette application et la distribuer. [Je peux m'occuper de mongoDb et le configurer séparément]

Je viens du monde Java) et nous y créons des fichiers jar pour les packages de bibliothèques et war/ear réutilisables déployés dans un conteneur de servlets. Maintenant, dans ce cas, puisque node.js agit comme un conteneur Web aussi, comment puis-je emballer mon webapp?

  1. Existe-t-il un format/des instructions standard pour les applications Web de nœud d’empaquetage créées avec express? (Existe-t-il un système de conditionnement JAR/War similaire pour les applications de noeud?)
  2. Comment puis-je le déployer une fois emballé? Deviendrait-il un exe, puisqu'il s'agit également de son propre conteneur?

PS: À partir de maintenant, je pense à copier manuellement tous les fichiers source requis 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 le fichier server.js. (En outre, ajoutez une sorte de surveillance, juste au cas où l'application se bloquerait et échouerait pour toujours) Je ne suis pas sûr que ce soit la bonne façon? Je suis convaincu qu'il doit exister un moyen standardisé de résoudre ce problème.

73
KBJ

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 conservé, vous pouvez simplement copier/compresser/copier le répertoire de votre application sur le système de production, à l’exception du 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 finalement NODE_ENV=production node server.js

Certaines diapositives récentes que j’ai jugées très utiles et qui incluent également le thème des wrappers pour toujours peuvent être trouvées ici .

41
MildlySerious

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 faire la configuration environnementale 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 ignorer les tests unitaires.

Vous avez des référentiels locaux pour maven dans le dossier .m2. Dans Node.js, votre projet Node.js contient un dossier node_modules. Vous pouvez voir les dossiers du module avec son nom.

Venons-en à la partie grunt de cette réponse. Grunt est un gestionnaire de tâches pour vos actifs frontaux, html, javascript, css. Par exemple, avant le déploiement, vous pouvez minifier les images html, css, javascript et. Vous pouvez également mettre les fonctions d'exécution de la tâche grunt dans package.json.

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

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

Sur la partie en cours d'exécution du 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 de test sur package.json)
  4. junit, powermock, ... => moka , nité-nœud , ...
  5. Spring MVC => Express.JS
  6. pom.xml => package.json
  7. import package => require('module_name')
87
Hüseyin BABAL
  1. Existe-t-il un format/des instructions standard pour les applications Web de nœud d’empaquetage créées avec express? (Existe-t-il un système de conditionnement JAR/War similaire pour les applications de noeud?)

Oui, spécification des packages CommonJS :

Cette spécification décrit le format du package CommonJS pour la distribution des programmes et des bibliothèques CommonJS. Un paquet CommonJS est un emballage cohérent d'un ensemble de modules, de code et d'autres actifs dans un seul formulaire. Il constitue la base d'une livraison, d'une installation et d'une gestion pratiques des composants CommonJS.

Pour votre prochaine question:

2. Comment puis-je le déployer une fois emballé? Deviendrait-il un exe, puisqu'il s'agit également de son propre conteneur?

J'appuie la suggestion de Hüseyin de déployer sur Herok pour la production. Pour le développement et la mise en scène, j'utilise Node-Appliance avec VirtualBox et Amazon EC2, respectivement:

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 application Web ne deviendra pas un exe.

6
David Braun

J'espère que cela pourrait être utile pour quelqu'un qui recherche la solution. Empaquetage de Node js apps peut être fait en utilisant la commande "npm pack". Il crée un fichier Zip de votre application qui peut être exécuté en production./environnement intermédiaire.

5
naveen kumar

quelques façons d'aborder ceci:

  • Poussez votre code dans le référentiel Git, en excluant tout ce qui n'est pas votre code (node_modules/**), puis tirez-le dans votre environnement intermédiaire, exécutez npm install pour restaurer toutes les dépendances

  • créez un package NPM à partir de celui-ci, installez-le via npm dans votre environnement de transfert (cela devrait également prendre en charge toutes les dépendances)

  • copie manuelle/fichiers ssh dans votre environnement de transfert (ceci peut être automatisé avec Grunt), puis restaurez vos dépendances via npm

4
dark_ruby

J'ai utilisé le module pkg de zeit. Il peut créer des livrables multiplateformes pour linux/win/macos. En fait utilisé dans la production et fonctionne bien sans aucun problème.

Il prend dans tous les scripts js et le pack dans un seul fichier.

La raison pour laquelle je l'ai utilisé est parce que cela aide à sécuriser votre code source. De cette façon, en production chez les clients, ils auront accès à l’application mais pas au code source.

L'un des avantages réside également dans le fait qu'en environnement de production, il n'est pas nécessaire que le client installe node.js, car les fichiers binaires du nœud sont également empaquetés dans la construction.

https://www.npmjs.com/package/pkg

0
varad11