J'écris une application web dans Node. Si j'ai un fichier JS db.js
avec une fonction init
, comment pourrais-je appeler cette fonction à partir de la ligne de commande?
J'écris une application web dans Node. Si j'ai un fichier JS db.js
avec une fonction init
, comment pourrais-je appeler cette fonction à partir de la ligne de commande?
Réponses:
Aucun commentaire sur la raison pour laquelle vous voulez faire cela, ou ce qui pourrait être une pratique plus standard: voici une solution à votre question .... Gardez à l'esprit que le type de guillemets requis par votre ligne de commande peut varier.
Dans votre db.js
, exportez la init
fonction. Il existe de nombreuses façons, mais par exemple:
module.exports.init = function () {
console.log('hi');
};
Ensuite, appelez-le comme ceci, en supposant que votre se db.js
trouve dans le même répertoire que votre invite de commande:
node -e 'require("./db").init()'
Pour les autres lecteurs, la init
fonction du PO aurait pu s'appeler n'importe quoi, ce n'est pas important, c'est juste le nom spécifique utilisé dans la question.
module.exports.init = function () { console.log('hi'); };
et node -e 'require("./db").init()'
n'a pas fonctionné pour moi en quelque sorte. Je ne suis pas sûr de ce que j'ai fait de mal, mais en suivant votre idée, j'ai utilisé module.exports = myFunction,
, puis node -e 'require("./myFunction")()'
travaillé pour moi.
node -e 'require("./index").handler(require("./fixtures/sample_event_01.json"), {}, console.log)'
. Le milieu {}
serait le contexte, n'hésitez pas à vous ajuster. Aussi console.log est un peu primitif mais un bon début. Bien sûr, vous pouvez également écrire un CLI.js dédié qui à son tour nécessite () est l'index.js / handler comme indiqué dans d'autres commentaires.
Comme pour les autres réponses, ajoutez ce qui suit à someFile.js
module.exports.someFunction = function () {
console.log('hi');
};
Vous pouvez ensuite ajouter ce qui suit à package.json
"scripts": {
"myScript": "node -e 'require(\"./someFile\").someFunction()'"
}
Depuis le terminal, vous pouvez ensuite appeler
npm run myScript
Je trouve cela un moyen beaucoup plus facile de se souvenir des commandes et de les utiliser
Essayez make-runnable .
Dans db.js, ajoutez require('make-runnable');
à la fin.
Vous pouvez maintenant:
node db.js init
Tout argument supplémentaire serait passé à la init
méthode.
Exécuter directement à partir de CLI (global)
Installer
npm i -g run-func
Utilisation c'est à dire exécuter la fonction "init", elle doit être exportée, voir en bas
run-func db.js init
ou
Exécuter à partir du script package.json (local)
Installer
npm i -S run-func
Installer
"scripts": {
"init": "run-func db.js init"
}
Usage
npm run init
Params
Tous les arguments suivants seront passés en tant que paramètres de fonction init(param1, param2)
run-func db.js init param1 param2
Important
la fonction (dans cet exemple init
) doit être exportée dans le fichier qui la contient
module.exports = { init };
ou export ES6
export { init };
make-runnable
, mais c'est beaucoup mieux que ça, je pense. Merci.
npm i -g run-func
manière simple:
disons que vous avez un fichier db.js dans un répertoire helpers de la structure du projet.
allez maintenant dans le répertoire helpers et allez dans la console des nœuds
helpers $ node
2) nécessite un fichier db.js
> var db = require("./db")
3) appelez votre fonction (dans votre cas, son init ())
> db.init()
J'espère que cela t'aides
Celui-ci est sale mais fonctionne :)
J'appellerai la main()
fonction de mon script. Auparavant, je mettais simplement les appels à main à la fin du script. Cependant, j'ai ajouté d'autres fonctions et les ai exportées à partir du script (pour utiliser des fonctions dans d'autres parties du code) - mais je ne veux pas exécuter la fonction main () chaque fois que j'importe d'autres fonctions dans d'autres scripts.
J'ai donc fait cela, dans mon script j'ai supprimé l'appel à main (), et à la fin du script j'ai mis cette vérification:
if (process.argv.includes('main')) {
main();
}
Donc, quand je veux appeler cette fonction en CLI: node src/myScript.js main
Je fais un IIFE, quelque chose comme ça:
(() => init())();
ce code sera exécuté immédiatement et invoquera la fonction init.
node init.js
et que le fichier contient un IIFE, cela fonctionnera. Je pense que je n'ai pas bien compris votre question. Désolé.
(init)();
si vous le souhaitez :)
Simple, dans le fichier javascript testfile.js:
module.exports.test = function () {
console.log('hi');
};
this.test();
Exécution à l'invite:
node testfile.js
test
est exécuté à chaque fois, vous devrez donc changer le fichier pour appeler une autre fonction)
Si votre fichier contient juste votre fonction, par exemple:
myFile.js:
function myMethod(someVariable) {
console.log(someVariable)
}
L'appeler à partir de la ligne de commande comme ceci ne se passera pas:
node myFile.js
Mais si vous changez votre fichier:
myFile.js:
myMethod("Hello World");
function myMethod(someVariable) {
console.log(someVariable)
}
Maintenant, cela fonctionnera à partir de la ligne de commande:
node myFile.js