Запуск функции из Node JS скрипта через командную строку

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для запуска функции в Node.js через командную строку, есть эффективный способ, позволяющий связывать аргументы командной строки с функциями в вашем скрипте:

JS
Скопировать код
function myFunction() {
  console.log('Прикольный факт: JavaScript и Java настолько разные, как машина и ковёр. Это – шутка программиста.');
}

const ARG_FUNCTION_MAP = {
  '--run': myFunction
};

const arg = process.argv[2]; // Второй аргумент командной строки

if(ARG_FUNCTION_MAP[arg]) {
  ARG_FUNCTION_MAP[arg]();
}

// Пример использования: node script.js --run
Кинга Идем в IT: пошаговый план для смены профессии

Динамические Импорты & Простые Настройки

Динамический Импорт и Запуск Функций

Динамические импорты предлагают гибкий подход к работе с функциями через командную строку в Node.js:

JS
Скопировать код
const functionName = process.argv[2];
import(`./${functionName}.js`)
  .then(module => {
    if(typeof module[functionName] === 'function') {
      module[functionName]();
    }
  });
// Пример использования: node script.js functionName

По умолчанию подразумевается, что имена файлов с модулями и имена экспортируемых функций должны совпадать.

Локальное превыше Глобального

Акцентируется на важности локальной установки для избежания загромождения глобального контекста и упрощения воссоздания рабочей среды.

json
Скопировать код
"scripts": {
  "run-function": "run-func db.js"
}
Bash
Скопировать код
npm run run-function init

Экспорт и Вызов

Доступ к Функциям

Чтобы функции стали доступны для использования, вы должны их экспортировать следующим образом:

JS
Скопировать код
// db.js
module.exports = { init };

// Или используйте синтаксис ES6
export const init = () => {
  // разместите свою логику здесь
};

Сделав так, вы обеспечиваете возможность выполнения кода из разных частей приложения или прямо из командной строки.

Функция-Caller

Чтобы выполнить функцию напрямую из командной строки, сделайте следующую проверку:

JS
Скопировать код
if (require.main === module) {
  const [,,func, ...args] = process.argv;
  if (typeof module.exports[func] === 'function') {
    module.exports[func](...args);
  }
}
// Пример использования: node db.js init arg1 arg2 arg3 ...

Визуализация

Ваш скрипт можно представить как набор инструментов, где каждая функция — это отдельный инструмент. Чтобы использовать конкретный инструмент, достаточно просто указать его имя. Например, мы выбираем молоток:

Bash
Скопировать код
node -e "require('./toolbox.js').hammer()"

И вот молоток готов к использованию!

Пользовательские Скрипты и Пакеты

Использование npm Скриптов

Создайте скрипт в файле package.json для обеспечения переиспользования и сокращения рутинных действий:

json
Скопировать код
"scripts": {
  "init-db": "node -e \"require('./db.js').init()\""
}
Bash
Скопировать код
npm run init-db // Запускаем процесс инициализации базы данных

Проверки Безопасного Выполнения Скриптов

Не забудьте убедиться в безопасности вызова функций, настроив соответствующую проверку:

JS
Скопировать код
// Скрипт db.js должен быть главным файлом, чтобы init() была вызвана.
if (require.main === module) {
  init();
}

Полезные материалы

  1. Process | Node.js v21.6.1 Documentation — познакомьтесь с process.argv в Node.js.
  2. Understanding module.exports and exports in Node.js — SitePoint — поймите, как работают exports и module.exports.
  3. commander – npm — пакет для создания интерфейсов командной строки.
  4. yargs — библиотека для разбора аргументов командной строки.
  5. Build a Command Line Application with Node.js | Okta Developer — пошаговое руководство по созданию CLI приложений.
  6. Creating and publishing unscoped public packages | npm Docs — как создавать и публиковать модули Node.js.