Я пишу веб-додаток у Node. Якщо у мене є якийсь файл JS db.js
з функцією init
в ньому, як я можу викликати цю функцію з командного рядка?
Я пишу веб-додаток у Node. Якщо у мене є якийсь файл JS db.js
з функцією init
в ньому, як я можу викликати цю функцію з командного рядка?
Відповіді:
Не коментуйте, чому ви хочете це зробити, або що може бути більш стандартною практикою: ось рішення вашого питання .... Майте на увазі, що тип лапок, необхідних для вашого командного рядка, може відрізнятися.
У своєму db.js
експорті init
функцію. Існує багато способів, але наприклад:
module.exports.init = function () {
console.log('hi');
};
Потім зателефонуйте так, припускаючи, що ваш файл db.js
знаходиться в тому ж каталозі, що і ваш командний рядок:
node -e 'require("./db").init()'
Іншим читачам функцію ОП init
можна було назвати чим завгодно, це не важливо, це лише конкретна назва, що використовується у питанні.
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, який, у свою чергу, вимагає () індексу.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
Будь-які подальші аргументи будуть передані init
методу.
Запустити безпосередньо з CLI (глобально)
Встановити
npm i -g run-func
Використання, тобто запустіть функцію "init", її потрібно експортувати, дивіться внизу
run-func db.js init
або
Запустити з script.json script (локальний)
Встановити
npm i -S run-func
Налаштування
"scripts": {
"init": "run-func db.js init"
}
Використання
npm run init
Парами
Будь-які наступні аргументи будуть передані як параметри функції 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()
сподіваюся, що це допомагає
Цей брудний, але працює :)
Я буду викликати main()
функцію зі свого сценарію. Раніше я просто ставив дзвінки в основний в кінці сценарію. Однак я додав деякі інші функції та експортував їх із скрипту (для використання функцій в деяких інших частинах коду) - але я не хочу виконувати функцію main () кожного разу, коли я імпортую інші функції в інші сценарії.
Тому я зробив це, у своєму скрипті я видалив виклик до main (), а замість цього в кінці сценарію я поставив цю перевірку:
if (process.argv.includes('main')) {
main();
}
Отже, коли я хочу викликати цю функцію в CLI: node src/myScript.js main
Я роблю IIFE, щось подібне:
(() => init())();
цей код буде виконаний негайно і викликає функцію init.
node init.js
і файл містить IIFE, він буде працювати. Я думаю, що я не повністю зрозумів ваше запитання. Вибачте.
(init)();
якщо хочете :)
Просто, у файлі 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