Des idées sur la façon dont je pourrais implémenter une recharge automatique des fichiers dans Node.js? J'en ai assez de redémarrer le serveur à chaque fois que je change un fichier. Apparemment, la require()
fonction de Node.js ne recharge pas les fichiers s'ils ont déjà été requis, donc je dois faire quelque chose comme ceci:
var sys = require('sys'),
http = require('http'),
posix = require('posix'),
json = require('./json');
var script_name = '/some/path/to/app.js';
this.app = require('./app').app;
process.watchFile(script_name, function(curr, prev){
posix.cat(script_name).addCallback(function(content){
process.compile( content, script_name );
});
});
http.createServer(this.app).listen( 8080 );
Et dans le fichier app.js j'ai:
var file = require('./file');
this.app = function(req, res) {
file.serveFile( req, res, 'file.js');
}
Mais cela ne fonctionne pas non plus - je reçois une erreur dans la process.compile()
déclaration disant que «exiger» n'est pas défini. process.compile
évalue app.js , mais n'a aucune idée des globaux node.js.
javascript
node.js
disc0dancer
la source
la source
Object.keys(require.cache).forEach(function(key) { delete require.cache[key]; });
Réponses:
Une bonne alternative à jour
supervisor
estnodemon
:Pour utiliser
nodemon
:la source
$ nodemon -L yourfile.js
(explication complète sur coderwall.com/p/aqxl_q )automatically restart the server - perfect for development
c'est beaucoup trop d'hyperbole. Le rechargement du serveur pourrait signifier la connexion aux services backend, ce qui prend beaucoup de temps dans mon cas. «Parfait pour le développement» serait quelque chose comme des classes de rechargement à chaud pendant que le processus s'exécute en mémoire sans perdre l'état comme le fait Android Studio lorsque vous changez le code source.npm install [--save-dev | -D] nodemon
pour limiter l'installation à la portée du projet.le superviseur de nœud est génial
utilisation pour redémarrer lors de la sauvegarde:
par isaacs - http://github.com/isaacs/node-supervisor
la source
"C:\Program Files\nodejs\node.exe" C:\Users\Mark\AppData\Roaming\npm\node_modules\supervisor\lib\cli-wrapper.js app.js
npm install supervisor
,node node_modules/supervisor/lib/cli-wrapper.js app.js
(j'ai une installation non root du nœud)PATH
j'ai trouvé un moyen simple:
la source
delete require.cache[require.resolve('./mymodule.js')];
résoudre un problème avec des chemins réels===
Si quelqu'un vient encore à cette question et veut la résoudre en utilisant uniquement les modules standard, j'ai fait un exemple simple:
Cet exemple ne concerne qu'un seul fichier (server.js), mais peut être adapté à plusieurs fichiers en utilisant un tableau de fichiers, une boucle for pour obtenir tous les noms de fichiers ou en regardant un répertoire:
Ce code a été conçu pour l'API Node.js 0.8, il n'est pas adapté à certains besoins spécifiques mais fonctionnera dans certaines applications simples.
MISE À JOUR: Cette fonctionnalité est implémentée dans mon module simpleR , GitHub repo
la source
watch
n'est pas nécessaire, le rechargement peut se faire sansfs
, en écoutant un signal différent.nodemon est apparu en premier dans une recherche google, et il semble faire l'affaire:
la source
Il y a Node-Supervisor que vous pouvez installer en
voir http://github.com/isaacs/node-supervisor
la source
Edit: Ma réponse est obsolète. Node.js est une technologie qui évolue très rapidement.
Je me suis également interrogé sur le rechargement des modules. J'ai modifié node.js et j'ai publié la source sur Github à nalply / node . La seule différence est la fonction
require
. Il a un deuxième argument facultatifreload
.Pour recharger
app.js
dans le répertoire courant, utilisezÉcrivez quelque chose comme ça, et vous avez le rechargement automatique :
Le seul problème que je vois est la variable
module
, mais j'y travaille maintenant.la source
nodemon
est un grand. J'ajoute juste plus de paramètres pour les options de débogage et d'observation.package.json
La commande:
nodemon --watch server --inspect ./server/server.js
Tandis que:
--watch server
Redémarrez l'application lors d'un changement.js
,.mjs
,.coffee
,.litcoffee
et les.json
fichiers dans leserver
dossier (sous - dossiers inclus).--inspect
Activez le débogage à distance../server/server.js
Le point d'entrée.Ajoutez ensuite la configuration suivante à
launch.json
(VS Code) et commencez le débogage à tout moment.Notez qu'il est préférable d'installer en
nodemon
tant que dépendance dev du projet. Ainsi, les membres de votre équipe n'ont pas besoin de l'installer ni de se souvenir des arguments de la commande, ilsnpm run dev
commencent simplement et commencent à pirater.En savoir plus sur les
nodemon
documents: https://github.com/remy/nodemon#monitoring-multiple-directoriesla source
Il y avait un fil récent sur ce sujet dans la liste de diffusion node.js. La réponse courte est non, il n'est actuellement pas possible de recharger automatiquement les fichiers requis, mais plusieurs personnes ont développé des correctifs qui ajoutent cette fonctionnalité.
la source
encore une autre solution à ce problème utilise pour toujours
la source
node-dev fonctionne très bien. npm
install node-dev
Il donne même une notification de bureau lorsque le serveur est rechargé et donnera le succès ou les erreurs sur le message.
démarrez votre application en ligne de commande avec:
node-dev app.js
la source
Voici un article de blog sur le rechargement à chaud pour le nœud. Il fournit une branche github Node que vous pouvez utiliser pour remplacer votre installation de Node afin d'activer le rechargement à chaud.
Du blog:
la source
Je travaille sur la création d'une "chose" de nœud assez petite qui est capable de charger / décharger des modules à volonté (donc, vous pourriez être en mesure de redémarrer une partie de votre application sans arrêter l'application entière). J'incorpore une gestion des dépendances (très stupide), de sorte que si vous voulez arrêter un module, tous les modules qui en dépendent seront également arrêtés.
Jusqu'ici tout va bien, mais ensuite je suis tombé sur la question de savoir comment recharger un module. Apparemment, on pourrait simplement supprimer le module du cache "require" et faire le travail. Comme je ne souhaite pas changer directement le code source du nœud, j'ai trouvé un hack très hacky qui est: recherchez dans la pile tracez le dernier appel à la fonction "require", récupérez une référence à son champ "cache" et..bien, supprimez la référence au nœud:
Encore plus facile, en fait:Apparemment, cela fonctionne très bien. Je n'ai absolument aucune idée de ce que signifie cet argument ["1"], mais il fait son travail. Je crois que les gars du nœud implémenteront un jour une fonction de rechargement, donc je suppose que pour l'instant cette solution est également acceptable. (btw. mon "truc" sera ici: https://github.com/cheng81/wirez , allez-y dans quelques semaines et vous devriez voir de quoi je parle)
la source
function (module, require) { /* your code */ }
. Lorsque vous en tenez compte,arguments[1]
pointez surrequire
. Et la boucle while est là pour les situations où vous appelez cela à partir d'une autre fonction d'un module (elle remonte simplement la hiérarchie des fonctions et vérifie les valeurs d'argument transmises à chacune).Vous pouvez utiliser nodemon de NPM . Et si vous utilisez le générateur Express, vous pouvez utiliser cette commande dans votre dossier de projet:
ou en utilisant le mode débogage
vous pouvez également exécuter directement
J'espère que cette aide.
la source
solution sur: http://github.com/shimondoodkin/node-hot-reload
notez que vous devez faire vous-même attention aux références utilisées.
cela signifie que si vous l'avez fait: var x = require ('foo'); y = x; z = x.bar; et rechargé à chaud.
cela signifie que vous devez remplacer les références stockées dans x, y et z. dans la fonction de rappel à chaud de Reaload.
certaines personnes confondent le rechargement à chaud et le redémarrage automatique. Mon module nodejs-autorestart a également une intégration upstart pour activer le démarrage automatique au démarrage. si vous avez une petite application, le redémarrage automatique est correct, mais lorsque vous avez une grande application, le rechargement à chaud est plus approprié. tout simplement parce que le rechargement à chaud est plus rapide.
J'aime aussi mon module d'afflux de nœuds.
la source
Pas nécessaire d'utiliser nodemon ou d'autres outils comme ça. Utilisez simplement les capacités de votre IDE.
Probablement meilleur est IntelliJ WebStorm avec fonction de rechargement à chaud (serveur automatique et reload navigateur) pour Node.js .
la source
Voici une méthode low tech à utiliser sous Windows. Mettez-le dans un fichier batch appelé
serve.bat
:Maintenant, au lieu d'exécuter à
node app.js
partir de votre shell cmd, exécutezserve app.js
.Cela ouvrira une nouvelle fenêtre shell exécutant le serveur. Le fichier de commandes se bloquera (à cause de
/wait
) jusqu'à ce que vous fermiez la fenêtre du shell, à quel moment le shell cmd d'origine demandera "Terminer la tâche par lots (O / N)?" Si vous répondez "N", le serveur sera relancé.Chaque fois que vous souhaitez redémarrer le serveur, fermez la fenêtre du serveur et répondez "N" dans le shell cmd.
la source
ma structure d'application:
installez d'abord reload avec cette commande:
puis changez package.json :
vous devez maintenant utiliser reload dans votre fichier serveur :
et pour le dernier changement, fin de votre réponse envoyez ce script :
démarrez maintenant votre application avec ce code:
la source
Utilisez ceci:
Il ne vous reste plus qu'à:
Et la configuration sera automatiquement rechargée :)
la source
loaddir est ma solution pour le chargement rapide d'un répertoire, récursivement.
peut revenir
{ 'path/to/file': 'fileContents...' }
ou{ path: { to: { file: 'fileContents'} } }
Il a
callback
qui sera appelé lorsque le fichier est modifié.Il gère les situations où les fichiers sont suffisamment volumineux pour
watch
être appelés avant la fin de l'écriture.Je l'utilise dans des projets depuis environ un an, et j'ai récemment ajouté des promesses.
Aidez-moi à le tester!
https://github.com/danschumann/loaddir
la source
Vous pouvez utiliser le rechargement automatique pour recharger le module sans arrêter le serveur.
installer
exemple
data.json
test.js
Résultat:
la source
une autre solution simple consiste à utiliser fs.readFile au lieu d'utiliser require, vous pouvez enregistrer un fichier texte contenant un objet json et créer un intervalle sur le serveur pour recharger cet objet.
avantages:
les inconvénients:
la source
Pour les personnes utilisant Vagrant et PHPStorm, l' observateur de fichiers est une approche plus rapide
désactivez la synchronisation immédiate des fichiers afin d'exécuter la commande uniquement lors de l'enregistrement, puis créez une étendue pour les fichiers * .js et les répertoires de travail et ajoutez cette commande
vagrant ssh -c "/var/www/gadelkareem.com/forever.sh restart"
où forever.sh est comme
la source
Je suis récemment venu à cette question parce que les suspects habituels ne travaillaient pas avec des packages liés. Si vous êtes comme moi et que vous tirez parti du
npm link
développement pour travailler efficacement sur un projet composé de nombreux packages, il est important que les changements qui se produisent dans les dépendances déclenchent également un rechargement.Après avoir essayé node-mon et pm2, même en suivant leurs instructions pour regarder en plus le dossier node_modules, ils n'ont toujours pas détecté les modifications. Bien qu'il y ait des solutions personnalisées dans les réponses ici, pour quelque chose comme ça, un package séparé est plus propre. J'ai rencontré node-dev aujourd'hui et cela fonctionne parfaitement sans aucune option ni configuration.
Du Readme:
la source
la source
Vous pouvez le faire avec l' actualisation du navigateur . Votre application de nœud redémarre automatiquement, votre page de résultats dans le navigateur est également actualisée automatiquement. L'inconvénient est que vous devez mettre l'extrait de code js sur la page générée. Voici le dépôt pour l'exemple de travail.
la source
J'ai essayé pm2 : l'installation est facile et facile à utiliser aussi; le résultat est satisfaisant. Cependant, nous devons nous occuper de l'édition de pm2 que nous voulons. pm 2 runtime est l'édition gratuite, tandis que pm2 plus et pm2 enterprise ne sont pas gratuites.
Quant à Strongloop , mon installation a échoué ou n'était pas terminée, donc je ne pouvais pas l'utiliser.
la source
De nos jours, le serveur de développement WebPack avec option chaude est utilisé. vous pouvez ajouter un script comme celui-ci dans votre package.json:
"hot": "cross-env NODE_ENV=development webpack-dev-server --hot --inline --watch-poll",
et chaque changement dans vos fichiers déclenchera automatiquement une recompilation
la source