Мінімальне оточення для JS-розробки: ava, standard, chokidar-cli і precommit-hook

Навколо повно JavaScript-фреймворків, бібліотек і різноманітних інструментів. Що вибрати? Дивлячись на таку різноманітність, розробнику непросто відповісти на це питання.

image

З досвіду знаю: перший крок нового проекту, наприклад, створення модуля або засоби командного рядка, полягає в налаштування робочого оточення. Деяким цей крок подобається, деякі його терпіти не можуть, але і у тих і у інших попередня підготовка часто займає забагато часу. Особливо, коли треба все ретельно перевірити і змусити всі механізми злагоджено і стабільно працювати разом.

Звичайно, можна включити в арсенал JS-розробника webpack, eslint, jasmine, або навіть TypeScript. При такому підході з пошуком і усуненням помилок проблем не буде. Але вся справа в тому, що для вирішення більшості допоміжних завдань чудово підійдуть прості інструменти, які практично не потребують налаштування. Оточення, зібране з них, дозволить максимально швидко почати роботу, забезпечить контроль правильності коду і своєчасне сповіщення про помилки.

Коли я замислююся про мінімальний JS-оточенні, на думку відразу приходять чотири речі: тестування програми і аналіз коду, відстеження змін файлів в процесі роботи і перевірка проекту перед фіксацією транзакцій в системі контролю версій.

Зараз я детально розповім про те, як, буквально на порожньому місці, створити середовище розробки, яка дозволить в лічені хвилини приступити до продуктивної праці.

Ініціалізація проекту Node.js і Git-репозиторію
Спочатку створимо директорію і перейдемо до неї. Тут конструкція
$_
зберігає останній аргумент команди.

$ mkdir awesome-module && cd $_

Тепер ініціалізуємо проект Node.js з налаштуваннями за замовчуванням.

npm init --yes

Створимо папки і файли

$ mkdir lib test
$ touch index.js lib/meaningOfLife.js test/index.test.js test/meaningOfLife.test.js

Тепер ініціалізуємо Git-репозиторій і зафіксуємо першу трансакцію.

$ git init
$ git add -A; git commit -am "Awesome Module, day one"

Структуру проекту ми підготували, займемося інструментами.

Установка інструментів
Ми будемо використовувати чотири простих модуля, кожен з яких призначений для рішення одного завдання:

  • Відкрити – тестування.
  • Standard – статичний аналіз коду.
  • Chokidar-cli – спостереження за змінами в файлах.
  • Precommit-hook – автоматичний запуск npm-скриптів.
Чому я вибрав саме їх? Просто тому, що вони не вимагають взагалі ніякої налаштування. Такий підхід відмінно розвантажує голову, відкриваючи дорогу корисним ідей, що стосуються розробки. Встановимо модулі, виконавши наступну команду в папці проекту:

$ npm i --save-dev ava standard chokidar-cli precommit-hook

Після установки (швидкість якої залежить тільки від настрою NPM), не забудьте створити файл
.gitignore
і додати в нього теку
node_modules
. Вона в репозиторії не потрібна.

Налаштування проекту
Самі по собі, наші інструменти в налаштуванні не потребують, але ось проект, все ж, доведеться налаштувати. Правда, тут все гранично просто. Відкрийте
package.json
і додайте в нього такі скрипти:

"scripts": {
"test": "ava",
"lint": "standard",
"dev": "chokidar '**/*.js' -c 'standard && ava'"
},
"pre-commit": ["test", "lint"],

Ось, власне, і все. Як тільки ви виконає команду
npm run dev
,
chokidar
почне спостерігати за станом файлів, запускаючи, при необхідності,
standard
для статичного аналізу та
відкрити
для тестування коду. Якщо виникають проблеми, ви відразу ж про це дізнаєтеся. Те ж саме стосується і внесення змін в репозиторій. Наше середовище не дасть зафіксувати транзакцію до тих пір, поки проект не буде успішно проаналізований і протестований.

Тут хотілося б звернути увагу на дві речі.

  1. Не потрібно встановлювати
    standard
    або
    відкрити
    глобально, так як вони виконуються зсередини контексту
    node
    .

  2. Так як ми використовуємо
    &&
    замість
    ;
    в скрипті
    dev
    , тести не будуть викликані до тих пір, поки код не пройде перевірку статичним аналізатором. Це прискорює роботу.
Як цим користуватися
Середовище розробки розрахована на програмування в стилі розробки через тестування (TDD). Як тільки запускається скрипт
dev
, можна створювати тести, вони будуть автоматично додаватися до набору випробувань коду, без необхідності перезапуску засоби спостереження за файлами або виконання будь-яких інших операцій.

Створимо перший тест.

// test/meaningOfLife.test.js
const test = require('відкрити')
const meaningOfLife = require('../lib/meaningOfLife')

test('Real meaning of life', (t) => {
t.is(meaningOfLife(), 42)
})

Після збереження файлу система відразу ж повідомить про те, що один з тестів провалений. Виправимо це.

// lib/meaningOfLife.js
module.exports = () => 42

Тепер все працює як треба! Простіше нікуди. Створимо модуль, який примножує числові параметри. Відразу ж підготуємо модульний тест для нього, а також подивимося, чи правильно працює новий модуль
meaningOfLife
. Це, до речі, буде вже інтеграційний, а не модульний тест. Ось код модуля:

// lib/multiply.js
module.exports = (number) => {
if (typeof number !== 'number') throw new TypeError('Only numbers can be multiplied!')
return number * 2
}

Ось тест до нього:

// test/multiply.test.js
const test = require('відкрити')
const multiply = require('../lib/multiply')

test('Can multiply numbers', (t) => {
t.is(multiply(10), 20)
})

test('Throws when you try to multiply non-number value', (t) => {
t.throws(() => multiply('ohai!'), 'Only numbers can be multiplied!')
})

Тепер протестуємо всі разом:

// test/index.test.js
const test = require('відкрити')
const awesomeModule = require('../index')

test('Works nicely together', (t) => {
t.is(awesomeModule(), 84)
})

І внесемо таке в index.js:

// index.js

const meaningOfLife = require('./lib/meaningOfLife')
const multiply = require('./lib/multiply')

module.exports = () => multiply(meaningOfLife())

Тести пройдені! Як бачите, завдяки простоті інструментів, ми дуже швидко приступили до роботи над проектом, витративши зовсім небагато часу на підготовку оточення.

Підсумки
Нові блискучі інструменти часто буквально гіпнотизують програмістів, змушуючи забути про головне. А головне – це спрощення та прискорення роботи і боротьба з помилками. Зазвичай, набагато частіше, ніж може здатися, що для вирішення цих завдань досить найпростіших засобів. Таких, які дозволяють витрачати час на створення програм, а не на налаштування допоміжних систем.

Коли проект почне рости, можливо, ви відчуєте, що вам потрібно що-небудь набагато більш просунутий, ніж проста комбінація ava, standard, chokidar-cli і precommit-hook. Але в більшості випадків, однак, більше нічого не знадобиться. І ті прості і зрозумілі інструменти, про які я розповів, прослужать вам вірою і правдою дуже і дуже довго.
А в якому середовищі створюєте програми ви?
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.