node index.js --action="get" --id=5
node index.js --action="add" --name="Mango" --email="mango@gmail.com" --phone="322-22-22"
node index.js --action="remove" --id=3
- Ініціалізується npm в проекті
- В корені проекту створи файл
index.js
- Постав пакет nodemon як залежність nodemon як залежність розробки (devDependencies)
- В файлі
package.json
додай "скрипти" для запускуindex.js
- Скрипт
start
який запускаєindex.js
с помощьюnode
- Скрипт
dev
який запускаєindex.js
за допомогоюnodemon
- Скрипт
У корені проекту створи папку db
. Ддля зберігання контактів завантаж і використовуй файл contacts.json, поклавши його в папку db
.
У корені проекту створи файл contacts.js
.
- Зроби імпорт модулів
fs
іpath
для роботи з файловою системою - Створи змінну
contactsPath
і запиши в неї шлях до файліcontacts.json
. Для складання шляху використовуй методи модуляpath
. - Додай функції для роботи з колекцією контактів. У функціях використовуй модуль
fs
и его методыreadFile()
іwriteFile()
- Зроби експорт створених функцій через
module.exports
// contacts.js
/*
* Розкоментуйте і запиши значення
* const contactsPath = ;
*/
// TODO: задокументувати кожну функцію
function listContacts() {
// ...твій код
}
function getContactById(contactId) {
// ...твій код
}
function removeContact(contactId) {
// ...твій код
}
function addContact(name, email, phone) {
// ...твій код
}
Зроби імпорт модуля contacts.js
в файлі index.js
и проверь работоспособность функций для работы с контактами.
В файлі index.js
імпортується пакет yargs
для зручного парса аргументів командного рядка. Використовуй готову функцію invokeAction()
яка отримує тип виконуваної дії і необхідні аргументи. Функція викликає відповідний метод з файлу contacts.js
передаючи йому необхідні аргументи.
// index.js
const argv = require("yargs").argv;
// TODO: рефакторить
function invokeAction({ action, id, name, email, phone }) {
switch (action) {
case "list":
// ...
break;
case "get":
// ... id
break;
case "add":
// ... name email phone
break;
case "remove":
// ... id
break;
default:
console.warn("\x1B[31m Unknown action type!");
}
}
invokeAction(argv);
Так само, ви можете використовувати модуль [commander] (https://www.npmjs.com/package/commander) для парсинга аргументів командного рядка. Це більш популярна альтернатива модуля yargs
const { Command } = require("commander");
const program = new Command();
program
.option("-a, --action <type>", "choose action")
.option("-i, --id <type>", "user id")
.option("-n, --name <type>", "user name")
.option("-e, --email <type>", "user email")
.option("-p, --phone <type>", "user phone");
program.parse(process.argv);
const argv = program.opts();
// TODO: рефакторить
function invokeAction({ action, id, name, email, phone }) {
switch (action) {
case "list":
// ...
break;
case "get":
// ... id
break;
case "add":
// ... name email phone
break;
case "remove":
// ... id
break;
default:
console.warn("\x1B[31m Unknown action type!");
}
}
invokeAction(argv);
Запусти команди в терміналі і зроби окремий скріншот результату виконання кожної команди.
# Отримуємо і виводимо весь список контактів у вигляді таблиці (console.table)
node index.js --action="list"
# Отримуємо контакт по id
node index.js --action="get" --id=5
# Добавялем контакт
node index.js --action="add" --name="Mango" --email="mango@gmail.com" --phone="322-22-22"
# Видаляємо контакт
node index.js --action="remove" --id=3
Скріншоти виконання команд, можна залити на будь-який безкоштовний хмарний сервіс зберігання картинок (Приклад: monosnap, imgbb.com) і відповідні посилання необхідно додати в файл README.md. Створіть цей файл в корені проекту. Після прикріпіть посилання на сховище з домашнім завданням в schoology для перевірки ментором.
- Створено репозиторій з домашнім завданням — CLI додаток
- Завдання відправлено менторові в schoology на перевірку (посилання на репозиторій)
- Код відповідає технічному завданню проекту
- При виконанні коду не виникає необроблених помилок
- Назва змінних, властивостей і методів починається з малої літери і записуються в нотації CamelCase. Використовуються англійські іменники
- Назва функції або методу містить дієслово
- У коді немає закоментованих ділянок коду
- Проект коректно працює з актуальною LTS-версією Node