Подтвердить что ты не робот

Выполнить функцию в script из командной строки (Node JS)

Я пишу веб-приложение в Node. Если у меня есть JS файл db.js с функцией init в нем, как я могу вызвать эту функцию из командной строки?

4b9b3361

Ответ 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