Я пишу веб-приложение в Node. Если у меня есть JS файл db.js
с функцией init
в нем, как я могу вызвать эту функцию из командной строки?
Выполнить функцию в script из командной строки (Node JS)
Ответ 1
Не комментируйте, почему вы хотите это сделать, или что может быть более стандартной практикой: вот решение вашего вопроса... Имейте в виду, что тип кавычек, требуемый вашей командной строкой, может отличаться.
В вашем db.js
экспортируйте функцию init
. Есть много способов, но, например:
module.exports.init = function () {
console.log('hi');
};
Затем назовите его так, предполагая, что ваш db.js
находится в том же каталоге, что и ваша командная строка:
node -e 'require("./db").init()'
Для других читателей функция init
OP могла быть вызвана как угодно, это не важно, это просто конкретное имя, используемое в вопросе.
Ответ 2
Что касается других ответов, добавьте следующее в someFile.js
module.exports.someFunction = function () {
console.log('hi');
};
Затем вы можете добавить следующее в package.json
"scripts": {
"myScript": "node -e 'require(\"./someFile\").someFunction()'"
}
Из терминала вы можете позвонить
npm run myScript
Я считаю, что это гораздо проще запомнить команды и использовать их
Ответ 3
Попробуйте make-runnable.
В db.js добавьте require('make-runnable');
в конец.
Теперь вы можете сделать:
node db.js init
Любые дополнительные аргументы передаются методу init
.
Ответ 4
Установите run-func в свой проект
npm i -D run-func
Запустите любую экспортированную функцию
run-func db.js init
Все последующие аргументы будут переданы в качестве параметров функции init(param1, param2)
run-func db.js init param1 param2
Это также можно запустить из раздела "скрипты" в package.json
"db-init": "run-func db.js init"
Важно, что функция (в этом примере init
) должна быть экспортирована в файл, содержащий ее
module.exports = { init };
или ES6 экспорт
export { init };
Ответ 5
простой способ:
скажем, у вас есть файл db.js в каталоге помощников в структуре проекта.
теперь перейдите в каталог помощников и перейдите в консоль node
helpers $ node
2) требуется файл db.js
> var db = require("./db")
3) вызовите свою функцию (в вашем случае ее init())
> db.init()
надеюсь, что это поможет
Ответ 6
Если вы превратите 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();
Ответ 7
Этот грязный, но работает :)
Я буду вызывать функцию main()
из моего скрипта. Ранее я просто помещал вызовы main в конец скрипта. Однако я добавил некоторые другие функции и экспортировал их из скрипта (чтобы использовать функции в некоторых других частях кода) - но я не хочу выполнять функцию main() каждый раз, когда импортирую другие функции в другие скрипты.
Итак, я сделал это, в моем скрипте я удалил вызов main(), и вместо этого в конце скрипта я поставил эту проверку:
if (process.argv.includes('main')) {
main();
}
Поэтому, когда я хочу вызвать эту функцию в CLI: node src/myScript.js main
Ответ 8
Я делаю IIFE, что-то вроде этого:
(() => init())();
этот код будет выполнен немедленно и вызовет функцию инициализации.
Ответ 9
Если ваш файл просто содержит вашу функцию, например:
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
Ответ 10
Простой, в файле javascript testfile.js:
module.exports.test = function () {
console.log('hi');
};
this.test();
Выполняется в командной строке:
node testfile.js