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?
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.
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
npm install
peut rompre les dépendances de version. 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. LIENCertainement 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
.
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.