Saya sedang menulis aplikasi web di Node. Jika saya punya beberapa file JS db.jsdengan fungsi initdi dalamnya bagaimana saya bisa memanggil fungsi itu dari baris perintah?
Saya sedang menulis aplikasi web di Node. Jika saya punya beberapa file JS db.jsdengan fungsi initdi dalamnya bagaimana saya bisa memanggil fungsi itu dari baris perintah?
Jawaban:
Tidak ada komentar tentang mengapa Anda ingin melakukan ini, atau apa yang mungkin menjadi praktik yang lebih standar: di sini adalah solusi untuk pertanyaan Anda .... Ingatlah bahwa jenis kutipan yang diperlukan oleh baris perintah Anda dapat bervariasi.
Di Anda db.js, ekspor initfungsi. Ada banyak cara, tetapi misalnya:
module.exports.init = function () {
console.log('hi');
};
Kemudian panggil seperti ini, dengan anggapan Anda db.jsberada di direktori yang sama dengan command prompt Anda:
node -e 'require("./db").init()'
Bagi pembaca lain, fungsi OP initbisa disebut apa saja, tidak penting, hanya nama spesifik yang digunakan dalam pertanyaan.
module.exports.init = function () { console.log('hi'); };Dan node -e 'require("./db").init()'entah bagaimana tidak berhasil untuk saya. Saya tidak yakin apa yang saya lakukan salah, tetapi dengan mengikuti ide Anda, saya menggunakan module.exports = myFunction, , dan kemudian node -e 'require("./myFunction")()'bekerja untuk saya.
node -e 'require("./index").handler(require("./fixtures/sample_event_01.json"), {}, console.log)'. Bagian tengah {}akan menjadi konteksnya, jangan ragu untuk menyesuaikan. Juga console.log agak primitif tetapi awal yang bagus. Tentu saja Anda juga dapat menulis CLI.js khusus yang pada gilirannya memerlukan () indeks.js / handler seperti yang dinyatakan dalam komentar lain.
Sesuai jawaban lain, tambahkan yang berikut ke someFile.js
module.exports.someFunction = function () {
console.log('hi');
};
Anda kemudian dapat menambahkan yang berikut ke package.json
"scripts": {
"myScript": "node -e 'require(\"./someFile\").someFunction()'"
}
Dari terminal, Anda dapat menelepon
npm run myScript
Saya menemukan ini cara yang jauh lebih mudah untuk mengingat perintah dan menggunakannya
Coba make-runnable .
Di db.js, tambahkan require('make-runnable');sampai akhir.
Sekarang Anda bisa melakukannya:
node db.js init
Argumen lebih lanjut akan diteruskan ke initmetode.
Jalankan langsung dari CLI (global)
Install
npm i -g run-func
Penggunaan yaitu menjalankan fungsi "init", itu harus diekspor, lihat bagian bawah
run-func db.js init
atau
Jalankan dari script package.json (lokal)
Install
npm i -S run-func
Mempersiapkan
"scripts": {
"init": "run-func db.js init"
}
Pemakaian
npm run init
Params
Argumen berikut akan diteruskan sebagai parameter fungsi init(param1, param2)
run-func db.js init param1 param2
Penting
fungsi (dalam contoh ini init) harus diekspor dalam file yang memuatnya
module.exports = { init };
atau ekspor ES6
export { init };
make-runnable, tetapi ini jauh lebih baik dari itu, saya pikir. Terima kasih.
npm i -g run-func
cara sederhana:
katakanlah Anda memiliki file db.js di direktori helpers dalam struktur proyek.
sekarang masuk ke dalam direktori helpers dan pergi ke konsol node
helpers $ node
2) membutuhkan file db.js
> var db = require("./db")
3) panggil fungsi Anda (dalam kasus Anda init ())
> db.init()
semoga ini membantu
Yang ini kotor tapi berfungsi :)
Saya akan memanggil main()fungsi dari skrip saya. Sebelumnya saya hanya melakukan panggilan ke utama di akhir skrip. Namun saya memang menambahkan beberapa fungsi lain dan mengekspornya dari skrip (untuk menggunakan fungsi di beberapa bagian kode lainnya) - tetapi saya tidak ingin menjalankan fungsi main () setiap kali saya mengimpor fungsi lain di skrip lain.
Jadi saya melakukan ini, dalam skrip saya menghapus panggilan ke main (), dan sebagai gantinya di akhir skrip saya beri tanda centang:
if (process.argv.includes('main')) {
main();
}
Jadi ketika saya ingin memanggil fungsi itu di CLI: node src/myScript.js main
Saya melakukan IIFE, sesuatu seperti itu:
(() => init())();
kode ini akan dieksekusi segera dan menjalankan fungsi init.
node init.jsdan file berisi IIFE itu akan berfungsi. Saya pikir saya tidak sepenuhnya memahami pertanyaan Anda. Maaf.
(init)();jika Anda mau :)
Sederhana, dalam file javascript testfile.js:
module.exports.test = function () {
console.log('hi');
};
this.test();
Berjalan saat diminta:
node testfile.js
testdijalankan setiap kali, jadi Anda harus mengubah file untuk memanggil fungsi lain)
Jika file Anda hanya berisi fungsi Anda, misalnya:
myFile.js:
function myMethod(someVariable) {
console.log(someVariable)
}
Memanggilnya dari baris perintah seperti ini tidak akan terjadi apa-apa:
node myFile.js
Tetapi jika Anda mengubah file Anda:
myFile.js:
myMethod("Hello World");
function myMethod(someVariable) {
console.log(someVariable)
}
Sekarang ini akan berfungsi dari baris perintah:
node myFile.js