web-dev-qa-db-fra.com

Méthode recommandée pour le déploiement de nodejs - Déplacement direct de node_modules vers le serveur ou exécution de la commande npm install

Quelle est la meilleure pratique pour déployer une application nodejs?

1) Déplacement direct des dossiers node_modules du serveur de développement vers le serveur de production, afin que notre même environnement local puisse également être créé dans la production. Les modifications apportées à distance aux modules de nœud n’affecteront pas notre code.

2) Exécutez la commande npm install sur le serveur de production à l’aide de package.json. Ici, le problème est que toute modification dans les modules de nœud affectera notre code. J'ai eu quelques problèmes avec le module de bouclage ( issue link ). 

Quelqu'un peut-il m'aider?

4
Sanjay Kumar N S

L'exécution de npm install sur le serveur de production ne peut pas être effectuée dans certains cas (manque d'outils de compilation, accès Internet restreint, etc.) et si vous devez déployer le même projet sur plusieurs machines, vous risquez de gaspiller de l'argent, de la mémoire et de la bande passante .

Vous devez exécuter npm install --production sur une machine avec les mêmes bibliothèques et la même version de noeud du serveur de production, compresser node_modules et déployer sur le serveur de production. Vous devez également conserver le fichier package-lock.json pour identifier les versions.

Cette approche vous permet également de générer/tester votre code à l'aide de packages de développement, puis d'élagage des node_modules avant le déploiement réel.

5
DBellavista

Je suppose qu'en posant cette question, vous ne comprenez pas vraiment le sens du fichier package.json.

Le fichier package.json est explicitement destiné à cette fin (qui, et le téléchargement dans le registre npm), permet le transfert d'un package de noeud sans avoir à transférer le nombre considérable de dépendances.

J'irais même jusqu'à dire qu'on devrait jamais déplacer manuellement le répertoire node_modules du tout.

Utilisez certainement la commande npm install sur votre serveur de production, c’est la bonne façon de le faire. Pour éviter toute modification du répertoire node_modules par rapport à votre environnement local, utilisez le fichier package lock. Cela devrait aider à minimiser les modifications apportées au code source dans node_modules.

Je veux dire pas de mauvaise intention en disant cela

2
harryparkdotio
  • Le déplacement du dossier node_modules est surchargé. 
  • L'exécution de npm install peut rompre les dépendances de version. 
  • La meilleure approche est npm ci. Il utilise le fichier package_lock et installe les dépendances requises sans modifier les versions. Npm ci destiné aux projets d'intégration continue. LIEN
1
Raj Sahoo

Certainement npm install. Mais vous ne devriez pas le faire vous-même lorsque vous déployez votre application.

Utilisez l'outil pour cela comme PM2 .

En ce qui concerne vos préoccupations concernant les modifications apportées aux packages, la réponse courte est package-lock.json.

1
tniezurawski

Je suis un développeur ASP.NET Core, mais j'ai récemment commencé à travailler avec les applications Node.js. Pour moi, c’est l’un des défis que vous avez évoqués pour déplacer le dossier node_modules en production. Au lieu de déplacer l'ensemble du dossier en production ou d'exécuter uniquement la commande npm install sur le serveur de production, j'ai trouvé un moyen de regrouper mon application Node.js à l'aide de Webpack dans un ou plusieurs ensembles, et je viens de me débarrasser du fouillis de gestion du dossier node_modules. Il ne prend que les packages node_modules requis utilisés/référencés dans mon application, les regroupe dans un fichier unique avec mon code d'application et je déploie ce fichier unique en production sans déplacer l'ensemble du dossier node_modules.

J'ai trouvé cette approche utile dans mon cas, mais s'il vous plaît, suggérez-moi si ce n'est pas la bonne manière en ce qui concerne les performances de l'application ou si des inconvénients de cette approche.

0
Ali Shahzad