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?
Pas de commentaire sur la raison pour laquelle vous voulez faire cela, ou sur 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 fonction init
. Il y a beaucoup de façons, mais par exemple:
module.exports.init = function () {
console.log('hi');
};
Appelez-le ensuite ainsi, en supposant que votre db.js
se trouve dans le même répertoire que votre invite de commande:
node -e 'require("./db").init()'
Pour d'autres lecteurs, la fonction init
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.
Comme dans 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 alors appeler
npm run myScript
Je trouve que c'est 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.
Maintenant vous pouvez faire:
node db.js init
Tout argument supplémentaire serait passé à la méthode init
.
Installez run-func sur votre projet
npm i -D run-func
Exécuter n'importe quelle fonction exportée
run-func db.js init
Tous les arguments suivants seront passés en tant que paramètres de fonction init(param1, param2)
run-func db.js init param1 param2
Cela peut également être exécuté à partir de la section "scripts" de package.json.
"db-init": "run-func db.js init"
Important la fonction (dans cet exemple init
) doit être exportée dans le fichier la contenant
module.exports = { init };
ou exportation ES6
export { init };
manière simple:
disons que vous avez le fichier db.js dans un répertoire helpers dans la structure du projet.
maintenant aller dans le répertoire helpers et aller à la console du noeud
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
Si vous transformez db.js
en un module, vous pouvez le demander à db_init.js
et juste: node db_init.js
.
db.js:
module.exports = {
method1: function () { ... },
method2: function () { ... }
}
db_init.js:
var db = require('./db');
db.method1();
db.method2();
Celui-ci est sale mais fonctionne :)
J'appellerai la fonction main()
de mon script. Auparavant, je venais de mettre les appels à main à la fin du script. Cependant, j’ai ajouté quelques autres fonctions et les ai exportées depuis le 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.
Donc j'ai fait ceci, dans mon script j'ai enlevé l'appel à main (), et à la place à la fin du script j'ai mis cette vérification:
if (process.argv.includes('main')) {
main();
}
Alors, quand je veux appeler cette fonction dans la 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.