В настоящее время почти все веб-сервисы или интеграции выполняются поверх среды выполнения Node.js. Node.js — это гибкая платформа с широкой поддержкой сообщества. Можно даже создавать такие документы, как xlsx, docx или pdf, прямо из Node.js. Все основные облачные платформы используют Node.js в качестве языка первого уровня.
Модульность
Node.js по своей конструкции обеспечивает модульность за счет использования структуры node_modules. Все необходимые модули хранятся в каталоге node_modules, и мы можем вызывать модули в любом месте нашего кода.
Но используем ли мы эту модульность в коде нашего приложения. Большинство приложений, которые я вижу, содержат папку lib, в которой мы храним все файлы JS. Эти файлы js импортируются в необходимые области с использованием относительных путей.
const db = require("../db/") const logging = require ("../../logging")
Основная проблема с таким подходом заключается в том, что когда мы меняем путь к служебному файлу, путь к БД должен измениться. Кроме того, формат не читается. Нас запутает подлинность файла.
Решение
Гораздо лучший подход — спроектировать наше приложение в виде модулей, таких как БД, ведение журнала, ошибка и т. д. Допустим, ваше приложение называется cms, тогда гораздо проще представить модуль с помощью области видимости.
require("@cms/db")
Вы можете разрабатывать модули отдельно и публиковать их на любом сервере NPM (общедоступном/частном) и использовать его как любой другой модуль.
Если вашему приложению нужен модуль ведения журнала:
npm install --save @cms/logging
Если вы не хотите разбивать свое приложение на части, есть еще один подход.
Лучший способ
Храните нужные модули в отдельной папке. Допустим, «@cms». Используйте отдельную папку для каждого модуля и пусть модули имеют отдельный package.json. Таким образом, он станет действительным модулем Node.
Package.json для модулей будет выглядеть так
{ "name": "@cms/db", "version": "1.0.1", "description": "db module for CMS Application", "main": "index.js", "dependencies":{ "mysql" : "latest" } }
Когда модули будут готовы, пришло время написать скрипт. Добавьте install.js в папку «scripts».
let fs = require('fs') console.log('Creating symlinks ...') if (fs.existsSync('node_modules/@cms')) { console.log('link exists already ') } else { let source = '../@cms' console.log(`creating link for ${source}`) fs.symlinkSync(source, 'node_modules/@cms', 'junction') console.log('done') }
Добавьте этот скрипт в ваш основной package.json.
{ "name": "CMSApplication", "version": "1.0.1", "description": "Sample CMS Application", "main": "index.js", "scripts": { "install": "node scripts/install.js", "start": "node index.js" }, "dependencies": { "express": "latest" } }
Скрипт будет выполняться каждый раз, когда вы выполняете установку npm. Таким образом, как только все остальные модули узла будут определены и зависимости будут установлены, будет создана ссылка из папки @cms снаружи на папку @cms внутри node_modules. Таким образом, любые изменения, внесенные вами во внешнюю папку @cms, будут отражены в папке внутри node_modules.
Вы можете видеть, что символические ссылки установлены для @cms. Это не файл ярлыка, а жесткие ссылки, созданные с помощью «ln» в Linux.
Внутри @cms вы можете увидеть наши модули, которые определены во внешней папке @cms.
Таким образом, вы можете достичь модульности. Папка «@cms» является частью вашего исходного кода. Затем вы можете импортировать необходимые модули обычным способом.
const {logger} = require("@cms/logging") logger.info("Welcome to CMS Application")
Если вы хотите, чтобы ваше приложение выполнялось, запустите «npm install», а затем «npm start».
Такой подход помогает мне сделать приложение более модульным и расширяемым. Дайте мне знать ваши мысли по этому поводу.