Я пишу веб-приложение в 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
функция 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, который, в свою очередь, требует () индексный обработчик 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
Любые дальнейшие аргументы будут переданы 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()
надеюсь это поможет
Этот грязный, но работает :)
Я буду вызывать main()
функцию из моего скрипта. Ранее я просто помещал вызовы 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