Piszę aplikację internetową w węźle. Jeśli mam plik JS db.js
z funkcją init
, jak mogę wywołać tę funkcję z wiersza poleceń?
Piszę aplikację internetową w węźle. Jeśli mam plik JS db.js
z funkcją init
, jak mogę wywołać tę funkcję z wiersza poleceń?
Odpowiedzi:
Bez komentarza na temat tego, dlaczego chcesz to zrobić, ani na temat bardziej standardowej praktyki: oto rozwiązanie twojego pytania ... Pamiętaj, że rodzaj cudzysłowu wymagany w wierszu poleceń może się różnić.
W twoim db.js
wyeksportuj init
funkcję. Istnieje wiele sposobów, ale na przykład:
module.exports.init = function () {
console.log('hi');
};
Następnie nazwij to w następujący sposób, zakładając, że Twój plik db.js
znajduje się w tym samym katalogu co wiersz polecenia:
node -e 'require("./db").init()'
Dla innych czytelników funkcję OP init
można było nazwać czymkolwiek, to nie jest ważne, to tylko konkretna nazwa użyta w pytaniu.
module.exports.init = function () { console.log('hi'); };
I node -e 'require("./db").init()'
jakoś mi nie działało. Nie jestem pewien, co zrobiłem źle, ale podążając za twoim pomysłem, wykorzystałem module.exports = myFunction,
, a potem node -e 'require("./myFunction")()'
pracowałem dla siebie.
node -e 'require("./index").handler(require("./fixtures/sample_event_01.json"), {}, console.log)'
. Środek {}
będzie kontekstem, możesz się dostosować. Również console.log jest nieco prymitywny, ale dobry początek. Oczywiście możesz także napisać dedykowany plik CLI.js, który z kolei wymaga () indeksu.js / handler, jak podano w innych komentarzach.
Podobnie jak w przypadku innych odpowiedzi, dodaj do someFile.js
module.exports.someFunction = function () {
console.log('hi');
};
Następnie możesz dodać następujące elementy package.json
"scripts": {
"myScript": "node -e 'require(\"./someFile\").someFunction()'"
}
Z terminala możesz następnie zadzwonić
npm run myScript
Uważam, że jest to o wiele łatwiejszy sposób zapamiętywania poleceń i ich używania
Uruchom bezpośrednio z CLI (globalnie)
zainstalować
npm i -g run-func
Użycie, tzn. Uruchomienie funkcji „init”, należy ją wyeksportować, patrz na dole
run-func db.js init
lub
Uruchom ze skryptu package.json (lokalny)
zainstalować
npm i -S run-func
Ustawiać
"scripts": {
"init": "run-func db.js init"
}
Stosowanie
npm run init
Params
Wszelkie następujące argumenty zostaną przekazane jako parametry funkcji init(param1, param2)
run-func db.js init param1 param2
Ważny
funkcja (w tym przykładzie init
) musi zostać wyeksportowana do pliku zawierającego ją
module.exports = { init };
lub eksport ES6
export { init };
make-runnable
, ale myślę , że jest to o wiele lepsze. Dzięki.
npm i -g run-func
prosta droga:
załóżmy, że masz plik db.js w katalogu helpers w strukturze projektu.
teraz przejdź do katalogu helpers i przejdź do konsoli węzła
helpers $ node
2) wymagają pliku db.js
> var db = require("./db")
3) wywołaj swoją funkcję (w twoim przypadku jej init ())
> db.init()
mam nadzieję że to pomoże
Ten jest brudny, ale działa :)
Będę wywoływał main()
funkcję z mojego skryptu. Wcześniej po prostu wstawiałem wywołania main na końcu skryptu. Dodałem jednak kilka innych funkcji i wyeksportowałem je ze skryptu (aby użyć funkcji w niektórych innych częściach kodu) - ale nie chcę wykonywać funkcji main () za każdym razem, gdy importuję inne funkcje w innych skryptach.
Zrobiłem to, w swoim skrypcie usunąłem wywołanie funkcji main (), a zamiast tego na końcu skryptu sprawdziłem:
if (process.argv.includes('main')) {
main();
}
Więc kiedy chcę wywołać tę funkcję w CLI: node src/myScript.js main
Robię IIFE, coś takiego:
(() => init())();
ten kod zostanie wykonany natychmiast i wywoła funkcję init.
node init.js
a plik zawiera IIFE, będzie działać. Myślę, że nie do końca zrozumiałem twoje pytanie. Przepraszam.
(init)();
jeśli chcesz :)
Proste, w pliku javascript testfile.js:
module.exports.test = function () {
console.log('hi');
};
this.test();
Uruchamianie po monicie:
node testfile.js
test
jest uruchamiany za każdym razem, więc musisz zmienić plik, aby wywołać inną funkcję)
Jeśli plik zawiera tylko funkcję, na przykład:
myFile.js:
function myMethod(someVariable) {
console.log(someVariable)
}
Wywołanie go z wiersza poleceń w ten sposób nic się nie wydarzy:
node myFile.js
Ale jeśli zmienisz plik:
myFile.js:
myMethod("Hello World");
function myMethod(someVariable) {
console.log(someVariable)
}
Teraz będzie to działać z wiersza poleceń:
node myFile.js