J'essaie d'installer mon propre serveur nodejs, mais j'ai un problème. Je n'arrive pas à trouver comment voir les modifications apportées à mon application sans la redémarrer. Existe-t-il un moyen d'éditer l'application et de voir les changements en direct avec node.js ?
Réponses
Trop de publicités?Nodules est un chargeur de modules pour Node qui gère le rechargement automatique des modules. sans redémarrer le serveur (puisque c'est ce que vous demandiez) :
http://github.com/kriszyp/nodules
Nodules effectue un suivi intelligent des dépendances de sorte que les fabriques de modules appropriées sont réexécutées pour préserver les références correctes lorsque les modules sont rechargés sans nécessiter un redémarrage complet.
Vérifier node-supervisor. Vous pouvez lui donner une collection de fichiers à surveiller pour les changements, et il redémarre votre serveur si l'un d'eux change. Il le redémarre également s'il se bloque pour une autre raison.
http://github.com/isaacs/node-supervisor
Le code "hot-swapping" n'est pas autorisé dans NodeJS car il est très facile de se retrouver accidentellement avec des fuites de mémoire ou des copies multiples d'objets qui ne sont pas collectés. Node a pour but de rendre vos programmes accidentellement rapides, et non accidentellement fuyants.
Si vous souhaitez recharger un module sans redémarrer le processus du nœud, vous pouvez le faire à l'aide de la fonction watchFile fonction dans fs et suppression du cache caractéristique de exiger :
Disons que vous avez chargé un module avec un simple require :
var my_module = require('./my_module');
Afin de surveiller ce fichier et de le recharger lorsqu'il est mis à jour, ajoutez ce qui suit à un endroit approprié de votre code.
fs.watchFile(require.resolve('./my_module'), function () {
console.log("Module changed, reloading...");
delete require.cache[require.resolve('./my_module')]
my_module = require('./my_module');
});
Si votre module est requis dans plusieurs fichiers, cette opération n'affectera pas les autres affectations, donc garder le module dans une variable globale et l'utiliser là où il est nécessaire à partir de la variable globale plutôt que de le requérir plusieurs fois est une option. Ainsi le code ci-dessus sera comme ceci :
global.my_module = require ('./my_module');
//..
fs.watchFile(require.resolve('./my_module'), function () {
console.log("Module changed, reloading...");
delete require.cache[require.resolve('./my_module')]
global.my_module = require('./my_module');
});
Utilisez ça : https://github.com/remy/nodemon
Exécutez votre application comme ceci : nodemon yourApp.js
Il faudrait mettre l'accent sur ce qui se passe, au lieu de tirer des modules sur le PO. De plus, nous ne savons pas si les fichiers qu'il édite sont tous des modules JS ou s'ils utilisent tous l'appel "require". Prenez les scénarios suivants avec un grain de sel, ils sont seulement destinés à décrire ce qui se passe afin que vous sachiez comment travailler avec.
-
Votre code a déjà été chargé et le serveur est en train de l'utiliser.
-
SOLUTION Vous devez avoir un moyen d'indiquer au serveur le code qui a changé pour qu'il puisse le recharger. Un point de terminaison pourrait être configuré pour recevoir un signal, une commande sur la ligne de commande ou une requête via tcp/http qui lui indiquerait quel fichier a été modifié et le point de terminaison le rechargerait.
//using Express var fs = require('fs'); app.get('reload/:file', function (req, res) { fs.readfile(req.params.file, function (err, buffer) { //do stuff... }); });
-
-
Votre code peut comporter des appels "require" qui chargent et les caches modules
-
SOLUTION puisque ces modules sont mis en cache par require, en suivant la solution précédente, vous auriez besoin d'une ligne dans votre endpoint pour supprimer cette référence
var moduleName = req.params.file; delete require.cache[moduleName]; require('./' + moduleName);
-
Il y a beaucoup de réserves à faire derrière tout cela, mais j'espère que vous avez une meilleure idée de ce qui se passe et pourquoi.
- Réponses précédentes
- Plus de réponses