Tôi đang viết một ứng dụng web bằng Node. Nếu tôi có một số tệp JS db.js
có hàm init
trong đó thì làm sao tôi có thể gọi hàm đó từ dòng lệnh?
Tôi đang viết một ứng dụng web bằng Node. Nếu tôi có một số tệp JS db.js
có hàm init
trong đó thì làm sao tôi có thể gọi hàm đó từ dòng lệnh?
Câu trả lời:
Không có nhận xét về lý do tại sao bạn muốn làm điều này, hoặc những gì có thể là một thực tiễn tiêu chuẩn hơn: đây là một giải pháp cho câu hỏi của bạn .... Hãy nhớ rằng loại trích dẫn theo yêu cầu của dòng lệnh của bạn có thể thay đổi.
Trong của bạn db.js
, xuất các init
chức năng. Có nhiều cách, nhưng ví dụ:
module.exports.init = function () {
console.log('hi');
};
Sau đó gọi nó như thế này, giả sử bạn db.js
đang ở trong cùng thư mục với dấu nhắc lệnh của bạn:
node -e 'require("./db").init()'
Đối với những người đọc khác, init
chức năng của OP có thể được gọi là bất cứ điều gì, nó không quan trọng, nó chỉ là tên cụ thể được sử dụng trong câu hỏi.
module.exports.init = function () { console.log('hi'); };
và node -e 'require("./db").init()'
không làm việc cho tôi bằng cách nào đó. Tôi không chắc chắn những gì tôi đã làm sai, nhưng bằng cách làm theo ý tưởng của bạn, tôi đã sử dụng module.exports = myFunction,
, và sau đó node -e 'require("./myFunction")()'
làm việc cho tôi.
node -e 'require("./index").handler(require("./fixtures/sample_event_01.json"), {}, console.log)'
. Giữa {}
sẽ là bối cảnh, hãy thoải mái điều chỉnh. Ngoài ra console.log là một chút nguyên thủy nhưng một khởi đầu tốt đẹp. Tất nhiên, bạn cũng có thể viết một CLI.js dành riêng mà lần lượt yêu cầu () là index.js / handler như đã nêu trong các bình luận khác.
Theo các câu trả lời khác, thêm phần sau vào someFile.js
module.exports.someFunction = function () {
console.log('hi');
};
Sau đó bạn có thể thêm vào như sau package.json
"scripts": {
"myScript": "node -e 'require(\"./someFile\").someFunction()'"
}
Từ thiết bị đầu cuối, sau đó bạn có thể gọi
npm run myScript
Tôi thấy đây là một cách dễ dàng hơn để ghi nhớ các lệnh và sử dụng chúng
Hãy thử trang điểm .
Trong db.js, thêm require('make-runnable');
vào cuối.
Bây giờ bạn có thể làm:
node db.js init
Bất kỳ đối số tiếp theo sẽ được truyền cho init
phương thức.
Chạy trực tiếp từ CLI (toàn cầu)
Tải về
npm i -g run-func
Cách sử dụng tức là chạy hàm "init", nó phải được xuất, xem phía dưới
run-func db.js init
hoặc là
Chạy từ script.json (cục bộ)
Tải về
npm i -S run-func
Thiết lập
"scripts": {
"init": "run-func db.js init"
}
Sử dụng
npm run init
Params
Bất kỳ đối số nào sau đây sẽ được truyền dưới dạng tham số hàm init(param1, param2)
run-func db.js init param1 param2
Quan trọng
hàm (trong ví dụ này init
) phải được xuất trong tệp chứa nó
module.exports = { init };
hoặc xuất ES6
export { init };
make-runnable
, nhưng điều này tốt hơn thế nhiều, tôi nghĩ vậy. Cảm ơn.
npm i -g run-func
cách đơn giản:
giả sử bạn có tệp db.js trong thư mục trợ giúp trong cấu trúc dự án.
Bây giờ hãy vào bên trong thư mục người trợ giúp và đi đến giao diện điều khiển nút
helpers $ node
2) yêu cầu tệp db.js
> var db = require("./db")
3) gọi hàm của bạn (trong trường hợp của bạn là init ())
> db.init()
hi vọng điêu nay co ich
Cái này bẩn nhưng làm việc :)
Tôi sẽ gọi main()
chức năng từ kịch bản của tôi. Trước đây tôi chỉ đặt các cuộc gọi đến chính ở cuối kịch bản. Tuy nhiên tôi đã thêm một số hàm khác và xuất chúng từ tập lệnh (để sử dụng các hàm trong một số phần khác của mã) - nhưng tôi không muốn thực thi hàm main () mỗi khi tôi nhập các hàm khác trong các tập lệnh khác.
Vì vậy, tôi đã làm điều này, trong kịch bản của tôi, tôi đã loại bỏ cuộc gọi đến hàm main () và thay vào đó, ở phần cuối của kịch bản, tôi đặt kiểm tra này:
if (process.argv.includes('main')) {
main();
}
Vì vậy, khi tôi muốn gọi hàm đó trong CLI: node src/myScript.js main
Tôi làm IIFE, đại loại như thế:
(() => init())();
mã này sẽ được thực thi ngay lập tức và gọi hàm init.
node init.js
và tệp chứa IIFE thì nó sẽ hoạt động. Tôi nghĩ rằng tôi đã không hiểu đầy đủ câu hỏi của bạn. Lấy làm tiếc.
(init)();
nếu bạn muốn :)
Đơn giản, trong tệp javascript testfile.js:
module.exports.test = function () {
console.log('hi');
};
this.test();
Chạy tại dấu nhắc:
node testfile.js
test
được chạy mỗi lần, vì vậy bạn phải thay đổi tệp để gọi một chức năng khác)
Nếu tệp của bạn chỉ chứa chức năng của bạn, ví dụ:
myFile.js:
function myMethod(someVariable) {
console.log(someVariable)
}
Gọi nó từ dòng lệnh như thế này sẽ không có gì xảy ra:
node myFile.js
Nhưng nếu bạn thay đổi tập tin của bạn:
myFile.js:
myMethod("Hello World");
function myMethod(someVariable) {
console.log(someVariable)
}
Bây giờ điều này sẽ làm việc từ dòng lệnh:
node myFile.js