Запуск функции из Node JS скрипта через командную строку
Быстрый ответ
Для запуска функции в Node.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
Динамические Импорты & Простые Настройки
Динамический Импорт и Запуск Функций
Динамические импорты предлагают гибкий подход к работе с функциями через командную строку в Node.js:
const functionName = process.argv[2];
import(`./${functionName}.js`)
.then(module => {
if(typeof module[functionName] === 'function') {
module[functionName]();
}
});
// Пример использования: node script.js functionName
По умолчанию подразумевается, что имена файлов с модулями и имена экспортируемых функций должны совпадать.
Локальное превыше Глобального
Акцентируется на важности локальной установки для избежания загромождения глобального контекста и упрощения воссоздания рабочей среды.
"scripts": {
"run-function": "run-func db.js"
}
npm run run-function init
Экспорт и Вызов
Доступ к Функциям
Чтобы функции стали доступны для использования, вы должны их экспортировать следующим образом:
// db.js
module.exports = { init };
// Или используйте синтаксис ES6
export const init = () => {
// разместите свою логику здесь
};
Сделав так, вы обеспечиваете возможность выполнения кода из разных частей приложения или прямо из командной строки.
Функция-Caller
Чтобы выполнить функцию напрямую из командной строки, сделайте следующую проверку:
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 ...
Визуализация
Ваш скрипт можно представить как набор инструментов, где каждая функция — это отдельный инструмент. Чтобы использовать конкретный инструмент, достаточно просто указать его имя. Например, мы выбираем молоток:
node -e "require('./toolbox.js').hammer()"
И вот молоток готов к использованию!
Пользовательские Скрипты и Пакеты
Использование npm Скриптов
Создайте скрипт в файле package.json
для обеспечения переиспользования и сокращения рутинных действий:
"scripts": {
"init-db": "node -e \"require('./db.js').init()\""
}
npm run init-db // Запускаем процесс инициализации базы данных
Проверки Безопасного Выполнения Скриптов
Не забудьте убедиться в безопасности вызова функций, настроив соответствующую проверку:
// Скрипт db.js должен быть главным файлом, чтобы init() была вызвана.
if (require.main === module) {
init();
}
Полезные материалы
- Process | Node.js v21.6.1 Documentation — познакомьтесь с process.argv в Node.js.
- Understanding module.exports and exports in Node.js — SitePoint — поймите, как работают exports и module.exports.
- commander – npm — пакет для создания интерфейсов командной строки.
- yargs — библиотека для разбора аргументов командной строки.
- Build a Command Line Application with Node.js | Okta Developer — пошаговое руководство по созданию CLI приложений.
- Creating and publishing unscoped public packages | npm Docs — как создавать и публиковать модули Node.js.