Sto scrivendo un'app Web in Node. Se ho un file JS db.jscon una funzione inital suo interno, come potrei chiamare quella funzione dalla riga di comando?
Sto scrivendo un'app Web in Node. Se ho un file JS db.jscon una funzione inital suo interno, come potrei chiamare quella funzione dalla riga di comando?
Risposte:
Nessun commento sul perché vuoi fare questo, o su quale potrebbe essere una pratica più standard: ecco una soluzione alla tua domanda .... Tieni presente che il tipo di virgolette richiesto dalla tua riga di comando può variare.
Nel tuo db.js, esporta la initfunzione. Ci sono molti modi, ma per esempio:
module.exports.init = function () {
console.log('hi');
};
Quindi chiamalo in questo modo, supponendo che db.jssia nella stessa directory del prompt dei comandi:
node -e 'require("./db").init()'
Per altri lettori, la initfunzione del PO avrebbe potuto essere chiamata qualsiasi cosa, non è importante, è solo il nome specifico utilizzato nella domanda.
module.exports.init = function () { console.log('hi'); };e node -e 'require("./db").init()'in qualche modo non ha funzionato per me. Non sono sicuro di cosa ho fatto di sbagliato, ma seguendo la tua idea ho usato module.exports = myFunction, e poi node -e 'require("./myFunction")()'ho lavorato per me.
node -e 'require("./index").handler(require("./fixtures/sample_event_01.json"), {}, console.log)'. Il mezzo {}sarebbe il contesto, sentiti libero di adattarmi. Anche console.log è un po 'primitivo ma un buon inizio. Ovviamente puoi anche scrivere un CLI.js dedicato che a sua volta richiede il gestore index.js / come indicato in altri commenti.
Come per le altre risposte, aggiungere quanto segue a someFile.js
module.exports.someFunction = function () {
console.log('hi');
};
È quindi possibile aggiungere quanto segue a package.json
"scripts": {
"myScript": "node -e 'require(\"./someFile\").someFunction()'"
}
Dal terminale, è quindi possibile chiamare
npm run myScript
Trovo che sia un modo molto più semplice per ricordare i comandi e usarli
Prova eseguibile .
In db.js, aggiungi require('make-runnable');alla fine.
Ora puoi fare:
node db.js init
Qualsiasi ulteriore argomento verrebbe passato al initmetodo.
Esegui direttamente dalla CLI (globale)
Installare
npm i -g run-func
Uso cioè eseguire la funzione "init", deve essere esportato, vedere il fondo
run-func db.js init
o
Esegui dallo script package.json (locale)
Installare
npm i -S run-func
Impostare
"scripts": {
"init": "run-func db.js init"
}
uso
npm run init
Parametri
Eventuali argomenti seguenti verranno passati come parametri di funzione init(param1, param2)
run-func db.js init param1 param2
Importante
la funzione (in questo esempio init) deve essere esportata nel file che la contiene
module.exports = { init };
o esportazione ES6
export { init };
make-runnable, ma questo è molto meglio di così, penso . Grazie.
npm i -g run-func
modo semplice:
diciamo che hai il file db.js in una directory di helpers nella struttura del progetto.
ora vai nella directory degli helper e vai alla console del nodo
helpers $ node
2) richiede il file db.js
> var db = require("./db")
3) chiama la tua funzione (nel tuo caso il suo init ())
> db.init()
spero che questo ti aiuti
Questo è sporco ma funziona :)
Chiamerò la main()funzione dal mio script. In precedenza ho appena effettuato le chiamate al main alla fine dello script. Tuttavia, ho aggiunto alcune altre funzioni e le ho esportate dallo script (per usare le funzioni in alcune altre parti del codice) - ma non voglio eseguire la funzione main () ogni volta che importa altre funzioni in altri script.
Quindi l'ho fatto, nel mio script ho rimosso la chiamata a main () e invece alla fine dello script ho messo questo controllo:
if (process.argv.includes('main')) {
main();
}
Quindi, quando voglio chiamare quella funzione nella CLI: node src/myScript.js main
Faccio un IIFE, qualcosa del genere:
(() => init())();
questo codice verrà eseguito immediatamente e invocherà la funzione init.
node init.jse il file contiene un IIFE funzionerà. Penso di non aver compreso appieno la tua domanda. Scusate.
(init)();se vuoi :)
Semplice, nel file javascript testfile.js:
module.exports.test = function () {
console.log('hi');
};
this.test();
In esecuzione al prompt:
node testfile.js
testviene eseguito ogni volta, quindi dovresti cambiare il file per chiamare un'altra funzione)
Se il tuo file contiene solo la tua funzione, ad esempio:
myFile.js:
function myMethod(someVariable) {
console.log(someVariable)
}
Chiamandolo dalla riga di comando in questo modo non accadrà nulla:
node myFile.js
Ma se cambi il tuo file:
myFile.js:
myMethod("Hello World");
function myMethod(someVariable) {
console.log(someVariable)
}
Ora funzionerà dalla riga di comando:
node myFile.js