Comment puis-je exécuter un Node.js script à partir d'une autre Node.js script
J'ai un Nœud autonome script appelé compile.js
. Il est assis à l'intérieur du dossier principal d'un petit Express app.
Parfois, je vais courir le compile.js
script à partir de la ligne de commande. Dans d'autres scénarios, je veux qu'il soit exécuté par l'Express app.
Les deux scripts à charger config de données à partir de la package.json
. Compile.js
ne pas exporter de méthodes en ce moment.
Quelle est la meilleure façon de charger ce fichier et de l'exécuter? J'ai regardé eval()
, vm.RunInNewContext
, et require
, mais vous ne savez pas quelle est la bonne approche.
Merci pour toute aide!!
- avez-vous considéré le var exec = require('child_process').exec; exec('noeud <path>/compile.js', ...) ?
- Serait nodejs.org/api/process.html#process_process_execargv adaptée à vos besoins?
- pourquoi ne pas tout simplement require() il?
- ne pas exporter de méthodes en ce moment."
- En fait, je pense exiger pourrait fonctionner, sauf que le script a quelque chose async passe. Peut-être il y a une version de ce rappel?
- Exec-sync semble prometteur: davidwalsh.nom/sync-exec
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser un processus enfant d'exécuter le script, et d'écouter d'erreur et de sortie des événements pour savoir quand le processus est terminé ou des erreurs (ce qui dans certains cas peuvent conduire à la sortie de l'événement ne se déclenche pas). Cette méthode a l'avantage de fonctionner avec n'importe quel script async, même ceux qui ne sont pas explicitement conçu pour être exécuté en tant que processus enfant, comme un tiers de script que vous souhaitez appeler. Exemple:
Noter que si l'exécution de scripts tiers dans un environnement où les questions de sécurité peuvent exister, il peut être préférable d'exécuter le script dans un bac à sable vm contexte.
child_process.execFileSync(file[, args][, options])
. voir nodejs.org/api/...exit
n'est pas déclenché, même si je neprocess.exit(0)
sur le processus enfant. Une idée?Bifurquer un processus enfant peut être utile, voir http://nodejs.org/api/child_process.html
À partir de l'exemple au lien:
Maintenant, le processus de l'enfant irait comme... également à partir de l'exemple:
Mais pour faire des tâches simples, je pense que la création d'un module qui étend les événements.EventEmitter classe va faire... http://nodejs.org/api/events.html