Рубрики
Без рубрики

Как сохранить свое здравомыслие при управлении NPM и функциями в узле

Тед грубым, как сохранить свое здравомыслие при управлении NPM и функциями в NodeIntRodincurectionin в моей карьере, я троллил сотни статей, занимающихся Nodejs и множеством полных примеров NODEJS, либо в типичных средних стеках или конкретных примерах с использованием различных модулей NPM. Неотъемлемая часть

Тед грубо

Вступление

В моей карьере я проводился через сотни статей, занимающихся NODEJS и множеством полных примеров NODEJS, либо в типичном среднем стеке, либо конкретным примерам, использующим различные модули NPM. Интегральная часть письма в Nodejs использует NPM или пряжу для установки библиотек, которые делают определенные вещи. Чтобы привести пример, который будут знать все программисты узла, есть библиотеки Express-Passport-JWT-Mongo NPM.

Мы все знаем, что стек тоже не остановится там. Экспресс, вероятно, также потребует установки «Телоаксирующего» и «CORS» и, возможно, Sub Express NPM модулей. Не забывайте Лоташ, подчеркивание, момент … и список продолжается и на то, что на тысячи модулей NPM есть тысячи модулей NPM.

Поддержание структуры модуля NPM в уме

Обычно, когда вы просмотрите кодовые фрагменты или системы в поисках, или напишите свой собственный, каждый файл будет содержать модули, необходимые для этого конкретного файла. Следующие фрагменты кода сделаны из реальных фрагментов кода, доступные в сети:

  • Обратите внимание, что эти примеры следует заменять «var» на «пусть» или «const» в зависимости от того, что делается.
var express = require('express');var path = require('path');var favicon = require('serve-favicon');var logger = require('morgan');var bodyParser = require('body-parser');

Тогда другой файл может начать с:

var morgan = require('morgan');var mongoose = require('mongoose');var passport = require('passport');

И третий файл начнется с:

var mongoose = require('mongoose');var Schema = mongoose.Schema;var bcrypt = require('bcrypt-nodejs');

Вы можете себе представить остальные файлы, и обычно много, даже в микросервисе, о том, как они выглядят.

Что делает эту практику еще хуже, это то, что вы можете найти «Требуется» в середине файла. Другими словами, код может перейти для многих строк, и вдруг кодер будет представлен еще один модуль NPM. Это обычно происходит с неопытными или не организованными кодами, но это невероятно распространенная практика и наносит Havoc с пониманием и кодом отладки.

Проблема, как вы можете хорошо видеть, это множество модулей NPM, рано, а не позже приведет к огромной головной боли в поддержании системы, особенно в команде программистов, которые должны знать, что уже установлено и доступно и что нет.

Программисты узлов печально известны для установки, тестирования и отказа от модулей NPM, (я признаю, что он один из них). Вопрос Конечно, как поддерживать здравомыслие, порядок и, самое главное, контролирует установленные модули NPM и общий метод вызова их.

К счастью, узел позволяет довольно простой метод решения этих проблем. Ниже приведен метод, который я использую для возвратных команд, имеющих дело с стеком. Он сохраняет вещи, легко найти, и все знают, что установлено и не установлено в системе. Это также позволяет чистым удалеть, когда модуль NPM больше не нужен.

Если вы являетесь «функциональным» программистом, другими словами, не все должно быть OOP с классами и «This->», следующее может на самом деле позволить вам пересмотреть совершенно новый способ использования функций и хранимых процедур.

Мое предложение будет создать каталог в соответствии с вашим каталогом CORT Project. Я обычно называю этот каталог “env” , но вы можете назвать это, что вам нравится. “env” Если я сохраняю все свои библиотеки функций и сохраненные процедуры, включая, если используются файл среды, необходимый для “Дотенв” NPM Библиотека. (Переменные среды могут быть проведены в любом месте, им не нужно проходить в каталоге корневого проекта. Тем не менее, обсуждение переменных окружающей среды и «Дотунв» является для другой статьи.) Другими словами, ваш “env” Справочник должен содержать только файлы, которые должны потребоваться или доступны по частям систем.

В “env” Каталог от корня, создать файл под названием “helpermods.js” Отказ (Опять же, вы можете назвать этот файл, все, что вам нравится.) Кроме того, если ваша система собирается использовать множество NPM модулей, или они только что используются для целей разработки (например, «Chalk»), вы моему желаете разделить это на два или три файла. Однако для нашего простого примера мы будем использовать один файл.

module.exports = {    request: require("request"), //used for request http    fs: require('fs'),    path: require('path'),    chalk: require('chalk'),    moment: require('moment'),    express: require('express'),    session: require('express-session'),    eJWT: require('express-jwt'),    bodyParser: require('body-parser'),    cors: require('cors'),    passport: require('passport'),    passportLocal: require('passport-local'),    crypto: require('crypto'),    dotenv: require('dotenv'),    jwt: require('jsonwebtoken'),    jwtclaims: require('jwt-claims'),    redis: require('redis'),    mongodb: require('mongodb'),    mongoose: require('mongoose'),    assert: require('assert'),    shortid: require('shortid'),    badWords: require('bad-words'),    enum: require('enum'),    errorHandler: require('errorhandler'),    morgan: require('morgan')};

Во-первых, установите модуль NPM, который вы хотите использовать, например:

npm i jsonwebtoken --s

Теперь решайте абонента для этого модуля. Например, в вышеупомянутом файле jsonwebtokkoke определяется первым как “jwt”. Затем требуют фактического модуля, который вы установили. Итак, линия будет читать:

jwt: require('jsonwebtoken'),

(Запятая в конце обусловлена форматом JSON файла.)

Что нужно знать в этом файле следующим образом:

1. Держите ваши звонки разных.

2. Несмотря на то, что вы видите выше, я бы сообщил в алфавиту в соответствии с вызовом или модулем NPM алфавита.

3. Помните, даже если это встроенный модуль NODEJS, такой как «Crypto» (YES «Crypto», теперь, наконец, часть внутренних NODEJS) или «запроса», которую вам нужно потребовать.

4. Действительно, если вам потребуется много «родных» модулей, вы можете разделить их в файлы, которые все могут быть вызваны из первых нескольких строк в каждом запуске файла.

5. Помните, что «namepaces» защитит вас от загрузки модуля дважды в память. После того, как вы позвоните этому модулю в вашем требовании, даже если вы назовите его снова из другого файла, он не будет больше или «дублировать» память.

После того, как у вас есть настройка файлов, метод вызова из любого файла довольно прост.

Каждый файл, который вы настроите или используете, должны начинаться с двух (более)) строк в зависимости от необходимых модулей. Например:

"use strict";const helpMods = require("./env/helperMods");

Эти вышеперечисленные линии выше потребуют все модули в вашем файле. Затем он становится простым способом, чтобы позвонить им с помощью точечной обозначения.

Например, если вам нужно позвонить в модуль BadWords, ваша точечная запись будет выглядеть так:

helpMods.badWords.(do whatever needs to be done normally here)

Если вы забудете HelpMods, IDE, такую как Webstorm, выбросит вам сообщение о запуске ошибки, что модуль не был необходим, который немедленно скажет вам, что вы забыли правильную точечную обозначение или что вы забыли включить этот модуль в вашем основном экспорте файл.

Поддержание пользовательских функций в праве

Опять же, при взгляде на многие примеры вы найдете функции в файле. Много раз эти функции – это «разовая», другими словами, специально использованными для очень конкретной ситуации, которая не будет повторяться. Или это будет?

В годы опыта я узнал, что, как только у вас есть функция, работающая правильно, есть хороший шанс, вы будете использовать его снова из другого файла. Возможно, параметры могут быть разными, или вам может потребоваться добавить к параметрам, которые он получает (легко выполняется с хорошим IDE), Но шансы вы будете использовать его снова .

По этой причине я поддерживаю набор функций библиотек в “env” каталог. Я обычно пытаюсь разделить эти функции в логические структуры. Например, все действия Crud и другие дБ будут переходить в один файл библиотеки функций. Все функции безопасности будут входить в другую. Это просто предложение.

Что делает этот тип программирования:

  • Дает вам и вашу команду контролировать окружающую среду.
  • Уменьшает необходимость определенных модулей снова и снова в каждом файле.
  • Гранты немедленного доступа к модулям NPM, которые вы, возможно, не думали, что вам нужно в файле.
  • Использует стандартную точечную обозначение без каких-либо обстоятельств.
  • Позволяет разделить свою структуру любым способом, которые вы считаете FIT, включая вызовов функции в функциональных файлах и т. Д. Таким образом. Тем не менее, функциональный файл не написан в том же типе структуры. Вам потребуется:
"use strict";const helpMods = require("./env/helperMods");

И любые другие файлы модулей вы решили.

Для этого примера мы будем использовать несколько функций, разделенных на заказ для нашей системы, то напишите и определите все функции, с обратными вызовами, обещаниями или ASYNC/ждут. Давайте позвоним файл “Generalfuncs.js” Каждая функция, хотя имеет имя.

Function(getExactTime(passed params go in here){/do stuff in here}
Function(logFile(passed params go in here){//do stuff in here}

Добавьте как можно больше функций, сколько нужно для этого файла. Итак, в конце функционального файла вы должны написать:

module.exports = {getExactTime, logfile, HTMLResponse, getRemoteConnect, doesKeyExist, generateUniqueKey, restartAll, createDateFromString};

Вышеуказанное позволит эти функции доступны в dot.notation к любому файлу, который вы добавляете следующее:

"use strict";const helpMods = require("./env/helperMods");const generalFuncs = require (../env/generalFuncs");

Теперь, когда вы используете функцию «Getexacttime», вы получаете доступ к ней следующим образом:

generalFuncs.getExactTime(whatever is needed goes here);

В качестве добавленного плюса в любом хорошем IDE вы сможете увидеть, какие функции никогда не экспортируются, поскольку они никогда не будут необходимы в любой системе.

Заключение

Вышеуказанные методы позволят вам поддерживать контроль и понимание того, что используется в системе. Функциональные файлы позволят рефакторировать функции вдоль маршрута, когда это необходимо сделать. Точечная запись позволит вам вызвать модули или функции простыми упорядоченными модами.

Он добавляет дополнительный уровень в вашу структуру каталогов, которая может привести к сумасшествию, доступа к ним из других подкуроров, если вы точно не знаете, как точно определите структуры каталогов узла (которые вы должны знать в любом случае). Если вы предпочли бы не сделать это, вы можете оставить их в вашем каталоге root приложений.

Ничего из этого, кстати, не будет мешать версию GitHub или элементы управления версиями. Действительно, проверка, рефакторинг и тестирование станут гораздо проще. Одиночные линии могут быть отмечены только для систем развития других для производственных систем.

Если вы можете обернуть вперед вокруг этого стиля кодирования, по крайней мере, с точки зрения модулей и, возможно, функций, вы найдете ваш Cleaner, проще читал, доступный для всей команды и легче рефакторинга.

________________________________________________________

Об авторе: TED Gross Courty служил CTO на протяжении многих лет с опытом в технологиях баз данных, Nodejs, MongoDB, шифрование, PHP и OOP. У него есть опыт в виртуальных мировых технологиях и дополненной реальности. Он также опубликовал много статей по технологическим темам, особенно на больших данных и теории хаоса (в профессиональных журналах и онлайн @ Medium & LinkedIn). Он также является автором литературной фантастики, детских книг и различных нефильтных статей Отказ Собрание его короткой истории, «Древние сказки, современные легенды» получил отличные отзывы.

TED можно добраться по электронной почте: tedwgross@gmail.com; Twitter (@ futedwgross); LinkedIn ; Середина

Оригинал: “https://www.freecodecamp.org/news/how-to-keep-your-sanity-while-managing-npm-functions-in-node-9a5889cce80d/”