ฉันกำลังเขียนเว็บแอปในโหนด หากฉันมีไฟล์ JS ที่db.js
มีฟังก์ชันinit
อยู่ฉันจะเรียกใช้ฟังก์ชันนั้นจากบรรทัดคำสั่งได้อย่างไร
ฉันกำลังเขียนเว็บแอปในโหนด หากฉันมีไฟล์ JS ที่db.js
มีฟังก์ชันinit
อยู่ฉันจะเรียกใช้ฟังก์ชันนั้นจากบรรทัดคำสั่งได้อย่างไร
คำตอบ:
ไม่มีความคิดเห็นเกี่ยวกับสาเหตุที่คุณต้องการทำสิ่งนี้หรือสิ่งที่อาจเป็นวิธีปฏิบัติที่เป็นมาตรฐานมากขึ้น: นี่คือคำตอบสำหรับคำถามของคุณ .... โปรดจำไว้ว่าประเภทของราคาที่จำเป็นสำหรับบรรทัดคำสั่งของคุณอาจแตกต่างกันไป
ในของคุณdb.js
ส่งออกinit
ฟังก์ชั่น มีหลายวิธี แต่ตัวอย่างเช่น:
module.exports.init = function () {
console.log('hi');
};
จากนั้นเรียกสิ่งนี้โดยสมมติว่าคุณdb.js
อยู่ในไดเรกทอรีเดียวกับพรอมต์คำสั่งของคุณ:
node -e 'require("./db").init()'
สำหรับผู้อ่านคนอื่นinit
ฟังก์ชั่นของ OP อาจถูกเรียกว่าอะไรก็ได้มันไม่สำคัญมันเป็นเพียงชื่อเฉพาะที่ใช้ในคำถาม
module.exports.init = function () { console.log('hi'); };
และnode -e 'require("./db").init()'
ไม่ได้ผลสำหรับฉันอย่างใด ฉันไม่แน่ใจว่าสิ่งที่ฉันทำผิด แต่จากการติดตามความคิดของคุณฉันใช้module.exports = myFunction,
แล้วnode -e 'require("./myFunction")()'
ทำงานให้ฉัน
node -e 'require("./index").handler(require("./fixtures/sample_event_01.json"), {}, console.log)'
เหตุการณ์และเรียกกลับ: ตรงกลาง{}
จะเป็นบริบทรู้สึกอิสระที่จะปรับ ยัง console.log เป็นบิตดั้งเดิม แต่เป็นการเริ่มต้นที่ดี แน่นอนคุณยังสามารถเขียนอุทิศ CLI.js ที่จะต้อง () 's index.js / จัดการตามที่ระบุไว้ในความคิดเห็นอื่น ๆ
ตามคำตอบอื่น ๆ เพิ่มต่อไปนี้เพื่อ someFile.js
module.exports.someFunction = function () {
console.log('hi');
};
จากนั้นคุณสามารถเพิ่มสิ่งต่อไปนี้ลงใน package.json
"scripts": {
"myScript": "node -e 'require(\"./someFile\").someFunction()'"
}
จากเทอร์มินัลคุณสามารถโทรได้
npm run myScript
ฉันพบวิธีนี้ง่ายกว่ามากในการจดจำคำสั่งและใช้งาน
ลองใช้งานได้
ใน db.js เพิ่มrequire('make-runnable');
ไปยังจุดสิ้นสุด
ตอนนี้คุณสามารถทำได้:
node db.js init
args เพิ่มเติมใด ๆ จะได้รับการส่งผ่านไปยังinit
วิธีการ
เรียกใช้โดยตรงจาก CLI (ทั่วโลก)
ติดตั้ง
npm i -g run-func
การใช้งานเช่นเรียกใช้ฟังก์ชั่น "init" มันจะต้องถูกส่งออกดูด้านล่าง
run-func db.js init
หรือ
เรียกใช้จาก package.json สคริปต์ (ในเครื่อง)
ติดตั้ง
npm i -S run-func
ติดตั้ง
"scripts": {
"init": "run-func db.js init"
}
การใช้
npm run init
params
อาร์กิวเมนต์ใด ๆ ต่อไปนี้จะถูกส่งผ่านเป็นพารามิเตอร์ฟังก์ชัน init(param1, param2)
run-func db.js init param1 param2
สำคัญ
ฟังก์ชั่น (ในตัวอย่างนี้init
) จะต้องส่งออกในไฟล์ที่มีมัน
module.exports = { init };
หรือการส่งออก ES6
export { init };
make-runnable
แต่นี่ดีกว่ามากฉันคิด ขอบคุณ
npm i -g run-func
วิธีง่าย ๆ :
สมมติว่าคุณมีไฟล์ db.js ในไดเรกทอรีผู้ช่วยเหลือในโครงสร้างโครงการ
ตอนนี้เข้าไปในไดเรกทอรีผู้ช่วยเหลือและไปที่โหนดคอนโซล
helpers $ node
2) ต้องการไฟล์ db.js
> var db = require("./db")
3) เรียกใช้ฟังก์ชั่นของคุณ (ในกรณีของคุณมัน init ())
> db.init()
หวังว่านี่จะช่วยได้
หากคุณเปิดdb.js
เข้าไปในโมดูลที่คุณสามารถกำหนดได้จากและเพียงแค่:db_init.js
node db_init.js
db.js:
module.exports = {
method1: function () { ... },
method2: function () { ... }
}
db_init.js:
var db = require('./db');
db.method1();
db.method2();
อันนี้สกปรก แต่ใช้งานได้ :)
ฉันจะเรียกmain()
ใช้ฟังก์ชันจากสคริปต์ของฉัน ก่อนหน้านี้ฉันเพิ่งโทรไปที่ main เมื่อสิ้นสุดสคริปต์ อย่างไรก็ตามฉันเพิ่มฟังก์ชั่นอื่น ๆ และส่งออกจากสคริปต์ (เพื่อใช้ฟังก์ชั่นในส่วนอื่น ๆ ของรหัส) - แต่ฉันไม่ต้องการที่จะใช้ฟังก์ชั่น main () ฟังก์ชั่นทุกครั้งที่ฉันนำเข้าฟังก์ชั่นอื่น ๆ
ดังนั้นฉันจึงทำสิ่งนี้ในสคริปต์ของฉันฉันได้ลบการเรียกไปยัง main () และในตอนท้ายของสคริปต์ฉันได้ทำการตรวจสอบนี้:
if (process.argv.includes('main')) {
main();
}
ดังนั้นเมื่อฉันต้องการเรียกใช้ฟังก์ชันนั้นใน CLI: node src/myScript.js main
ฉันทำ IIFE อะไรแบบนั้น:
(() => init())();
รหัสนี้จะถูกดำเนินการทันทีและเรียกใช้ฟังก์ชัน init
node init.js
และไฟล์มี IIFE มันจะทำงาน ฉันคิดว่าฉันไม่เข้าใจคำถามของคุณอย่างเต็มที่ ขอโทษ
(init)();
ถ้าคุณต้องการ :)
บางครั้งคุณต้องการเรียกใช้ฟังก์ชันผ่าน CLI บางครั้งคุณต้องการrequire
ใช้จากโมดูลอื่น นี่คือวิธีการทำทั้งสองอย่าง
// file to run
const runMe = () => {}
if (require.main === module) {
runMe()
}
module.exports = runMe
ง่ายในไฟล์ javascript testfile.js:
module.exports.test = function () {
console.log('hi');
};
this.test();
ทำงานที่พรอมต์:
node testfile.js
test
จะถูกเรียกใช้ทุกครั้งดังนั้นคุณต้องเปลี่ยนไฟล์เพื่อเรียกใช้ฟังก์ชันอื่น)
หากไฟล์ของคุณมีเพียงฟังก์ชั่นของคุณตัวอย่างเช่น:
myFile.js:
function myMethod(someVariable) {
console.log(someVariable)
}
เรียกมันจากบรรทัดคำสั่งเช่นนี้จะไม่มีอะไรเกิดขึ้น:
node myFile.js
แต่ถ้าคุณเปลี่ยนไฟล์:
myFile.js:
myMethod("Hello World");
function myMethod(someVariable) {
console.log(someVariable)
}
ตอนนี้จะทำงานจากบรรทัดคำสั่ง:
node myFile.js