Node.js
У якості бекенда системи використано NodeJS
Встановлення
Linux
Інструкція з встановлення знаходиться за посиланням
Windows
- Скачати образ за посиланням
- Встановити образ з викачаного
.exe
файла
Встановлення пакетів
Після того, як NodeJS було встановлено, потрібно виконати наступні дії для інсталяції усіх потрібних залежностей:
- Перейти до директорії NodeJS
- Виконати наступну команду
npm install
Оновлення пакетів
Усі пакети описані у файлі <директорія ноди>/package.json
Структура файлу має наступний вигляд:
{
"name": "package",
"version": "1.0.0",
"dependencies": {
"<назва пакету>": "<версія>"
}
}
Для зміни версії потрібно пакету, потрібно змінити версію у цьому файлі і виконати наступну команду:
npm install
Також, можна виконати команди відповідно до інструкції за посиланням
Альтернативи використаним npm пакетам
У системі використовуються npm пакети для розв'язання певних задач (перевірка pdf
на валідність, робота з мапами, робота з redis і тд.). Альтернативи даним пакетам існують, але зі зміною пакета потрібно змінювати код, бо набір функцій та їх назви можуть відрізнятись
Ризики прямого оновлення пакетів
При прямому новлені пакетів можуть бути оновлені і пакети на які вони посилаються, що може призвести до зміни роботи коду та винекненю помилок. Також оновлені пакети вже можуть не містити методів, які використовуються у коді, що також призведе до винекнення помилок. Щоб не допустити такого сценарію, нижче наведено список пакетів, версії яких не рекомендовано змінювати:
{
"name": "package",
"version": "1.0.0",
"dependencies": {
"@aws-sdk/client-s3": "^3.37.0",
"@grpc/grpc-js": "^1.5.0",
"@grpc/proto-loader": "^0.6.9",
"@iamtraction/google-translate": "^1.1.2",
"@mapbox/mbtiles": "^0.12.1",
"@mapbox/sphericalmercator": "^1.1.0",
"@mapbox/togeojson": "^0.16.0",
"@ngageoint/geopackage": "^4.1.0",
"@pdf-lib/fontkit": "^1.1.1",
"apache-crypt": "^1.2.4",
"autoprefixer": "^10.2.5",
"aws-sdk": "^2.1113.0",
"bee-queue": "^0.3.0",
"body-parser": "^1.19.0",
"carto": "^0.16.3",
"child-process-promise": "^2.2.1",
"connect-multiparty": "^2.2.0",
"connect-redis": "^5.1.0",
"convert-excel-to-json": "^1.7.0",
"csv-parser": "^3.0.0",
"encoding-japanese": "^1.0.30",
"express": "^4.17.1",
"express-cache-response-directive": "^1.1.0",
"express-session": "^1.17.1",
"extract-zip": "^2.0.1",
"fetch": "^1.1.0",
"fs-extra": "^10.0.0",
"got": "^11.8.2",
"handlebars": "^4.7.7",
"iconv-lite": "^0.6.3",
"inspector-api": "^1.4.1",
"ip": "^1.1.5",
"jest-html-reporter": "^3.5.0",
"jest-junit": "^13.2.0",
"joi": "^17.6.0",
"jsdoc-vuejs": "^4.0.0",
"json2csv": "^5.0.7",
"json2xls": "^0.1.2",
"less": "^4.1.1",
"log4js": "^6.3.0",
"markdown-it": "^12.2.0",
"md5": "^2.3.0",
"node-excel-export": "^1.4.4",
"node-html-parser": "^4.1.2",
"node-poppler": "^4.1.1",
"node-ssh": "^12.0.4",
"node-stream-zip": "^1.13.3",
"node-telegram-bot-api": "^0.52.0",
"nodemailer": "^6.5.0",
"otplib": "^12.0.1",
"parse-kml": "^1.0.1",
"passport": "^0.6.0",
"passport-custom": "^1.1.1",
"passport-local": "^1.0.0",
"pdf-lib": "^1.17.1",
"pg": "^8.5.1",
"pm2": "^5.1.2",
"promised-handlebars": "^2.0.1",
"puppeteer": "^13.0.1",
"qr-image": "^3.2.0",
"qrcode": "^1.5.0",
"redis": "^3.1.0",
"request-promise": "^4.2.6",
"require-reload": "^0.2.2",
"sass": "^1.52.3",
"send": "^0.17.2",
"socket.io": "^4.0.1",
"sphericalmercator": "^1.0.5",
"swagger-ui-express": "^4.4.0",
"tiny-async-pool": "^2.1.0",
"uid": "^2.0.0",
"undici": "^5.8.2",
"xls-to-json": "^2.1.0",
"xlsx": "^0.17.3",
"xml-js": "^1.6.11",
"xml2js": "^0.4.23",
"xmldom": "^0.6.0",
"yaml": "^1.10.2",
"yamljs": "^0.3.0"
}
}
Проблеми при виконанні npm install
При використанні npm для встановлення пакетів в проект, можуть виникати різноманітні критичні помилки. Однією з найпоширеніших помилок є конфлікти версій пакетів. Це може статися, коли два або більше пакетів вимагають різні версії одного й того ж пакету. npm намагається вирішити ці конфлікти, але іноді це неможливо без додаткових кроків.
Для вирішення конфліктів версій іноді використовують флаг --force
під час виконання npm install
. Цей флаг дозволяє "примусово" встановити пакети, незважаючи на конфлікти. Однак важливо бути обережним з його використанням, оскільки це може призвести до непередбачуваного поведінки та проблем у майбутньому.
При розширенні функціоналу встановлення нових бібліотек, слід уникати використання флагу --force
та розглядати інші кращі способи вирішення конфліктів версій. Наприклад, можна спробувати оновити всі пакети до їхніх останніх сумісних версій або розглянути реорганізацію залежностей проекту таким чином, щоб уникнути конфліктів. Краще використовувати інструменти та підходи, які сприяють правильній та стабільній роботі проекту, забезпечуючи при цьому потрібний функціонал.
Автотести
У системі наявні автотести JEST
Для запуску потрібно виконати наступну команду:
npm test
Результат виконання команди:
PASS module/core/test/file/helper.test.js
PASS module/core/test/convert.test.js
Test Suites: 2 skipped, 2 passed, 2 of 4 total
Tests: 6 skipped, 4 passed, 10 total
Snapshots: 0 total
Time: 0.97 s
Ran all test suites.
jest-html-reporter >> Report generated (./log/test-report.html)
Test results written to: log\test.json
Результати тестування записуються у теку <тека ноди>/log/test-report.html
Опис автотестів
У системі наявні настуцпні файли автотестів:
Назва файлу | За що відповідає |
---|---|
util_string.test.js | Перевірка коректності роботи функцій роботи з рядками та вони повертають очікувані результати в різних сценаріях. |
util_format.test.js | Перевірка коректності роботи функцій роботи з часом та вони повертають очікувані результати в різних сценаріях |
edr.nais.api.test.js | Перевірка коректності роботи функцій інтеграйції з НАІС працюють коректно та повертають очікувані результати в різних сценаріях |
helper.test.js | Перевірка коректності роботи функцій підстановки отримання даних із зовнішних джерел для наповнення веб форм |
convert.test.js | Перевірка коректності роботи функцій перетворення типів файлів xlsx -> json та html -> pdf |
request.test.js | Перевірка коректності виконання запитів до зовнішних ресурсів з модуля |