Ich schreibe eine Web-App in Node. Wenn ich eine JS-Datei db.js
mit einer Funktion init
darin habe, wie kann ich diese Funktion über die Befehlszeile aufrufen?
Ich schreibe eine Web-App in Node. Wenn ich eine JS-Datei db.js
mit einer Funktion init
darin habe, wie kann ich diese Funktion über die Befehlszeile aufrufen?
Antworten:
Kein Kommentar dazu, warum Sie dies tun möchten oder was eine Standardpraxis sein könnte: Hier ist eine Lösung für Ihre Frage ... Beachten Sie, dass die Art der Anführungszeichen, die für Ihre Befehlszeile erforderlich sind, variieren kann.
db.js
Exportieren Sie in Ihrem die init
Funktion. Es gibt viele Möglichkeiten, aber zum Beispiel:
module.exports.init = function () {
console.log('hi');
};
Rufen Sie es dann so auf, vorausgesetzt, Sie db.js
befinden sich im selben Verzeichnis wie Ihre Eingabeaufforderung:
node -e 'require("./db").init()'
Für andere Leser hätte die init
Funktion des OP alles heißen können, es ist nicht wichtig, es ist nur der spezifische Name, der in der Frage verwendet wird.
module.exports.init = function () { console.log('hi'); };
und node -e 'require("./db").init()'
irgendwie nicht für mich gearbeitet. Ich bin mir nicht sicher, was ich falsch gemacht habe, aber indem ich Ihrer Idee gefolgt bin, habe ich sie verwendet module.exports = myFunction,
und dann node -e 'require("./myFunction")()'
für mich gearbeitet.
node -e 'require("./index").handler(require("./fixtures/sample_event_01.json"), {}, console.log)'
. Die Mitte {}
wäre der Kontext, zögern Sie nicht, sich anzupassen. Auch console.log ist ein bisschen primitiv, aber ein guter Anfang. Natürlich können Sie auch eine dedizierte CLI.js schreiben, für die wiederum () der index.js / handler erforderlich ist, wie in anderen Kommentaren angegeben.
Fügen Sie gemäß den anderen Antworten Folgendes hinzu: someFile.js
module.exports.someFunction = function () {
console.log('hi');
};
Sie können dann Folgendes hinzufügen package.json
"scripts": {
"myScript": "node -e 'require(\"./someFile\").someFunction()'"
}
Vom Terminal aus können Sie dann anrufen
npm run myScript
Ich finde es viel einfacher, sich die Befehle zu merken und sie zu verwenden
Versuchen Sie es mit make-runnable .
Fügen Sie in db.js require('make-runnable');
das Ende hinzu.
Jetzt können Sie tun:
node db.js init
Alle weiteren Argumente würden an die init
Methode übergeben.
Direkt von der CLI ausführen (global)
Installieren
npm i -g run-func
Verwendung dh Ausführungsfunktion "init", muss exportiert werden, siehe unten
run-func db.js init
oder
Führen Sie das Skript package.json aus (lokal).
Installieren
npm i -S run-func
Konfiguration
"scripts": {
"init": "run-func db.js init"
}
Verwendung
npm run init
Params
Alle folgenden Argumente werden als Funktionsparameter übergeben init(param1, param2)
run-func db.js init param1 param2
Wichtig
Die Funktion (in diesem Beispiel init
) muss in die Datei exportiert werden, die sie enthält
module.exports = { init };
oder ES6-Export
export { init };
make-runnable
, aber das ist viel besser, denke ich. Vielen Dank.
npm i -g run-func
einfacher Weg:
Angenommen, Sie haben die Datei db.js in einem Hilfeverzeichnis in der Projektstruktur.
Gehen Sie jetzt in das Helfer-Verzeichnis und zur Knotenkonsole
helpers $ node
2) erfordern die Datei db.js.
> var db = require("./db")
3) Rufen Sie Ihre Funktion auf (in Ihrem Fall ihre init ())
> db.init()
hoffe das hilft
Dieser ist schmutzig, funktioniert aber :)
Ich werde die main()
Funktion aus meinem Skript aufrufen . Zuvor habe ich am Ende des Skripts nur main aufgerufen. Ich habe jedoch einige andere Funktionen hinzugefügt und sie aus dem Skript exportiert (um Funktionen in einigen anderen Teilen des Codes zu verwenden) - aber ich möchte die main () - Funktion nicht jedes Mal ausführen, wenn ich andere Funktionen in andere Skripte importiere.
Also habe ich dies getan, in meinem Skript habe ich den Aufruf von main () entfernt und stattdessen am Ende des Skripts diese Prüfung durchgeführt:
if (process.argv.includes('main')) {
main();
}
Wenn ich diese Funktion in der CLI aufrufen möchte: node src/myScript.js main
Ich mache ein IIFE, so ähnlich:
(() => init())();
Dieser Code wird sofort ausgeführt und ruft die Init-Funktion auf.
node init.js
und die Datei ein IIFE enthält, wird es funktionieren. Ich glaube, ich habe Ihre Frage nicht vollständig verstanden. Es tut uns leid.
(init)();
wenn Sie wollen :)
Einfach, in der Javascript-Datei testfile.js:
module.exports.test = function () {
console.log('hi');
};
this.test();
Laufen an der Eingabeaufforderung:
node testfile.js
test
Wenn Ihre Datei nur Ihre Funktion enthält, zum Beispiel:
myFile.js:
function myMethod(someVariable) {
console.log(someVariable)
}
Wenn Sie es über die Befehlszeile so aufrufen, geschieht nichts:
node myFile.js
Aber wenn Sie Ihre Datei ändern:
myFile.js:
myMethod("Hello World");
function myMethod(someVariable) {
console.log(someVariable)
}
Dies funktioniert nun über die Befehlszeile:
node myFile.js