FreePBX13 пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅ
Слишком длинный поисковый запрос.
По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
Всем привет! В сегодняшней статье расскажем об одном из самых полезных, на наш взгляд, коммерческих модулей FreePBX и продемонстрируем процесс его настройки. Особенно поможет данный модуль системным администраторам, которым часто приходится подготавливать телефонные аппараты для новых сотрудников, а также обслуживать и обновлять их. Итак, встречайте - модуль EndPoint Manager! Его стоимость на момент написания статьи 17.01.18 составляет 149$ (8 418 рубля), лицензия предоставляется на 25 лет. Согласитесь, в масштабах компании - это не такая большая сумма, а время Вашего админа – бесценно :) /p> Конечно, если Вы являетесь счастливым обладателем телефонов от Sangoma, то благами модуля EPM вы можете пользоваться бесплатно :) Обзор Модуль EndPoint Manager позволяет организовать функционал auto-provisioning, когда телефонный аппарат нужно только подключить к сети, а все необходимые настройки он автоматически скачает с сервера, после чего сразу же будет готов к работе. Помимо телефонных аппаратов, с помощью данного модуля можно также настраивать шлюзы, конференц-фоны, беспроводные трубки, дверные телефоны и пэйджинг устройства самых популярных производителей VoIP оборудования: Aastra Algo AND Audiocodes Cisco Cortelco Cyberdata Digium Grandstream HTek Mitel Mocet Obihai Panasonic Phoenix Audio Polycom Sangoma Snom Uniden Vtech Xorcom Yealink Полный список конкретных поддерживаемых устройств можно найти на сайте разработчика: https://wiki.freepbx.org/display/FPG/EPM-Supported+Device Основное предназначение EPM - это создание шаблонов (template) с необходимыми настройками, которые потом можно применять на одном или группе аналогичных устройств, что сводит подготовку устройств к минимуму. Общий механизм работы примерно такой - После создания шаблона с настройками для определённой модели телефонного аппарата, администратор, с помощью модуля EPM, привязывает данный шаблон к конкретному внутреннему номеру (extension) по MAC адресу данного устройства. После этого автоматически создаётся конфигурационный файл вида ХХХХ.cfg, где ХХХХ – MAC адрес устройства, который, сервер FreePBX с установленным EPM, хранит на файловом хранилище. Когда телефонный аппарат подключается в сеть, то вместе с IP адресом, он получает по DHCP адреса сервера (option 66), на котором для него создан файл конфигурации. После чего телефон обращается на данный сервер и скачивает готовую конфигурацию и, опционально, актуальную прошивку. То есть, по сути, для того чтобы ввести новый телефон в эксплуатацию, нам нужно только подключить его в сеть, узнать его MAC адрес и всё! Более подробно про процесс auto-provisioning и option 66 можно почитать в нашей статье Модуль имеет несколько подразделов, каждый из которых имеет своё предназначение, рассмотрим их: Global Settings - в данном разделе настраиваются общие параметры модуля, такие как внутренняя и внешняя адресация, порты, административные и пользовательские пароли для устройств Extension Mapping - данный раздел предназначен для настройки соответствия внутреннего номера, настроенного на IP-АТС и назначения определённого шаблона конфигурации. Привязка происходит по MAC адресу аппарата Brands - данный раздел содержит шаблоны конфигураций для определённого бренда и моделей VoIP оборудования. Брендов может быть несколько, они добавляются в разделе Add Brand. По умолчанию тут только шаблон для телефонов Sangoma. Add Brand - здесь Вы можете добавить новый бренд, для которого в дальнейшем будете создавать шаблоны конфигураций Image Management - данный раздел предназначен для управления фоновым изображением на телефонном аппарате, если конечно он его поддерживает Ringtone Management - данный раздел предназначен для управления рингтонами звонка на телефонном аппарате; Basefile Edit - с помощью данного раздела можно изменять дефолтные параметры самих шаблонов для любой модели телефона. Как правило, это подразумевает редактирование XML файла конфигурации. Custom Extensions - данный раздел предназначен для настройки телефонных аппаратов, которые не зарегистрированы на вашей АТС. Поскольку модуль EPM по умолчанию видит только пул внутренних номеров локальной АТС, то для настройки удалённых устройств, например с другой АТС, необходимо сначала объявить их в этом разделе. Firmware Management - данный раздел позволяет управлять прошивками устройств всех брендов. Помимо этого, можно управлять их версиями и назначать определённому шаблону ту или иную версию прошивки. Network Scan - с помощью данной утилиты можно просканировать сеть и получить список MAC адресов устройств, которым ещё не назначены шаблоны конфигураций и сразу же их назначить через раздел Extension Mapping. Стоит отметить, что поскольку MAC адреса не маршрутизируются, то определить можно только устройства, находящиеся в одной сети с IP-АТС, поэтому здесь нужно указывать локальную сеть. То есть, например, если IP адрес Вашей АТС – 192.168.11.64/24, то Вы сможете успешно просканировать только устройства в сети 192.168.11.0/24. Настройка Рассмотрим подробнее каждый из разделов, описанных выше. После установки, модуль появляется в разделе Settings. Доступ к разделам модуля осуществляется по нажатию на кнопку в правом углу: Первое, с чего необходимо начать - это глобальные настройки Global Settings. Internal IP - здесь указываем локальный адрес нашей IP- АТС. Можно ввести слово auto, тогда локальный IP адрес будет определён автоматически. External IP - в этом поле указываем внешний адрес нашей IP-АТС или валидный FQDN. Это поле нужно только если у вас есть телефоны, которые подключаются из вне. Можно ввести слово auto, тогда внешний IP адрес будет определён автоматически, чтобы не использовать данное поле – введите none Ports - данная секция отображает номера портов, которые настроены для различных сервисов - Web Server - порт для доступа к вэб-интерфейсу модуля, HTTP Provisioning - порт для auto-provisioning по протоколу HTTP, TFTP Provisioning - порт для auto-provisioning по протоколу TFTP, RESTful Apps - порт использующийся для интеграции Phone Apps с IP-АТС. Номера данных портов настраиваются в модуле System Admin, настроить через EPM их нельзя. Phone Admin Password - здесь можно административный пароль для доступа к вэб-интерфейсу телефонных аппаратов. Пароль будет одинаковым для всех устройств под управлением модуля EPM Phone User Password - некоторые телефоны имеют разные уровни доступа к вэб-интерфейсу управления. В данном поле можно настроить пароль для пользовательского уровня. ReSync Time - время, по истечению которого телефон будет заного запрашивать конфигурацию с сервера, чтобы актуализировать её. По умолчанию это день – 86400 секунд XML-API (RestAPI) Default Login - разрешает доступ к Phone Apps, если это поддерживается телефоном. Extension Mapping IP Address и Phone Status - здесь настраивается как будет отображаться статус телефонного аппарата в разделе Extension Mapping. Можно показывать IP адрес телефона и время последнего ping’а данного аппарата По завершению настроек необходимо нажать Save Global Теперь, когда у нас есть глобальные настройки, можно добавлять и настраивать шаблоны для любых брендов телефонных аппаратов, которые будут подключаться к нашей IP-АТС. Для этого открываем меню и кликаем Add Brand, перед нами откроется список поддерживаемых производителей, выберем Cisco. После этого, перед нами откроется окно с параметрами настроек нового шаблона для устройств Cisco: Внимание! Дальнейшие параметры могут отличаться в зависимости от выбранного в предыдущем шаге производителя. Ниже будет приведён пример для Cisco Template Name - имя шаблона. Рекомендуем указывать здесь модели, для которых создаётся шаблон, а также для каких телефонных аппаратов он предназначен – локальных или удаленных. Например, в нашем случае шаблон будет для локальных телефонов Cisco SPA 504G Destination Address - адрес IP-АТС, на который телефон будет обращаться для того, чтобы зарегистрироваться. Значения Internal и External берутся из Global Settings или же вы можете указать адрес вручную нажав Custom Provision Server Protocol - протокол, который будут использовать телефоны для получения своих конфигурационных файлов - TFTP или HTTP Provision Server Address адрес provisioning сервера, на который телефон будет обращаться для получения конфигурации. Значения Internal и External берутся из Global Settings или же вы можете указать адрес вручную нажав Custom. В нашем случае - Destination Address и Provision Address будут совпадать и являться адресом IP-АТС 192.168.11.64, это наиболее распространённый случай. Time Zone - временная зона Primary Time Server и Time Server 2 - сервера синхронизации времени NTP Daylight Savings - включает переход на летнее время Background Image - фоновое изображение для телефонного аппарата. Загружается в разделе Image Management Line Label - позволяет вывести идентификатор линии на LCD экран телефона (если он есть): Extension - выводит внутренний номер, например “7007” Name - выводит имя внутреннего номера, например “Alex Dobronravov” Name-Extension - выводит имя и номер, например “Alex Dobronravov 7007” Обратите внимание, что в зависимости от используемого телефона количество отображаемых символов может быть ограничено Dial Pattern - здесь можно поменять стандартные шаблоны набора номера, используемые телефоном. Символы в данном поле будут зависеть от выбранного производителя Firmware Version - здесь мы можем настроить загрузку прошивок для моделей телефонных аппаратов, для которых создаётся шаблон. При нажатии на кнопку Firmware Management мы попадаем в соответствующий раздел, в котором уже доступны все прошивки для телефонов Cisco (в том числе и для нужного нам SPA 504G), выберем самый актуальный пак. В каждом паке содержатся прошивки для разных моделей телефонов. Из пака загружаются только прошивки для моделей, которые выбраны в шаблоне. Можно указать разные версии прошивок, для этого нужно выбрать разные паки в Firmware Slot 1 и с После чего в настройках шаблона в поле Firmware Version мы можем выбрать нужный слот, чтобы загрузить его на все телефонные аппараты, которые будут выбраны в данном шаблоне. Available Phones - в данном списке находим нужную нам модель телефонного аппарата (в нашем случае – SPA 504G) и кликаем на неё. После чего перед нами открывается окно с настройками кнопок телефонного аппарата. Доступные настройки будут зависеть от выбранной модели В данном случае мы настроили на первой кнопке телефона SPA 504G отображение линии, а на второй BLF по номеру 3032. Отметим, что подобная конфигурация будет присвоена всем телефонам, которым мы назначим данный шаблон. Если их много, то некоторым, например, может не понадобиться BLF одного и того же номера, учитывайте это. В дальнейшем, настройки кнопок можно будет изменить для каждого телефона индивидуально. Отметим также, что можно создать один шаблон для нескольких моделей телефонов (а также для панелей расширения Expansion Module и других устройств, например, в случае Cisco - FXS), для этого просто отметьте и настройте необходимые модели: По завершению настройки шаблона доступно несколько опций сохранения - Save - просто сохранит новый шаблон, Save and Rebuild Config(s) - сохранит конфигурацию подготовит её к загрузке на телефоны, которые используют данный конфиг при следующем цикле синхронизации, Save, Rebuild and Update Phones - данный вариант перезапишет новую конфигурацию, подготовит её к загрузке на телефоны, которым назначен данный шаблон и отправят её на эти телефоны, что может вызвать перезагрузку телефонов. Стоит отметить, что пока никаким телефонам не назначен данный шаблон – при использовании опций Save and Rebuild Config(s) и Save, Rebuild and Update Phones ничего не произойдёт, опции действуют только когда в разделе Extension Mapping есть активные устройства. Для более тонкой настройки параметров, которые невозможно настроить стандартными средствами шаблона, используйте функционал Basefile Edit. Он предназначен для опытных пользователей и позволяет править конфигурацию шаблона для определённой модели на уровне её конфигурационного файла, как правило – формата XML Завершение настройки и назначение настроенного шаблона телефонным аппаратам Теперь, когда мы закончили с настройкой шаблона, самое время привязать его к внутреннему номеру и к конкретному телефонному аппарату. Для этого есть 2 способа: Предварительно убедитесь, что настраиваемые телефонные аппараты подключены в сеть и получают адреса по DHCP. Также, на DHCP сервере должна быть настроена опция 66 (option 66), сообщающая телефону адрес provisioning сервера, на котором хранится конфигурация. Заходим в раздел Extension Mapping и нажимаем Add Extension. Выбираем внутренний номер, из списка зарегистрированных на нашей IP-АТС, которому хотим назначить шаблон (тут также можно настроить Custom Extension, о котором говорилось выше), далее выбираем учётную запись SIP, в нашем случае - Account 1. Во втором столбце выбираем бренд - Cisco и ниже прописываем MAC адрес настраиваемого телефона. В последнем столбце выбираем шаблон, который мы только что настроили (в нашем случае spa504g_internal) и модель телефона (в нашем случае Cisco SPA 504G) После этого выбираем способ сохранения конфигурации и нажимаем Use Selected. Мы выбрали Save, Rebuild and Update Phones, чтобы конфиг сразу же отправился на телефон. Заходим в модуль Extensions ищем нужный внутренний номер и открываем вкладку Other. В разделе Endpoint заполняем необходимые поля и нажимаем Submit В обоих случаях, после данных манипуляций, создаётся конфигурационный файл XXXXYYYYZZZZ.cfg , где XXXXYYYYZZZZ – МАС адрес телефонного аппарата и хранится в файловом хранилище сервера. Когда телефон подключится в сеть, то от DHCP сервера он получит IP адрес, а также через опцию 66 – адрес provisioning сервера, в нашем случае – это TFTP сервер 192.168.11.64. Телефонный аппарат обратится на TFTP сервер и скачает от туда свой конфигурационный файл XXXXYYYYZZZZ.cfg. Таким образом, телефон будет сразу готов к работе.
img
Шлюзы Yeastar TA FXO — это VoIP-шлюзы с портами FXO для подключения аналоговых линий. TA1610 отличается богатым функционалом и простотой конфигурирования, идеален для малых и средних предприятий, которые хотят объединить традиционную телефонную сеть компании с телефонной сетью на базе IP. Yeastar TA FXO помогает сохранить предыдущие инвестиции и уменьшить затраты на коммуникации. В серии шлюзов Yeastar TA FXO имеются шлюзы на 4, 8 и 16 портов. Шлюз TA1610 оснащен выходом Telco на 50 pin. $dbName_ecom = "to-www_ecom"; $GoodID = "7403639742"; mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение "); mysql_select_db($dbName_ecom) or die(mysql_error()); $query_ecom = "SELECT `model`, `itemimage1`, `price`, `discount`, `url`, `preview115`, `vendor`, `vendorCode` FROM `items` WHERE itemid = '$GoodID';"; $res_ecom=mysql_query($query_ecom) or die(mysql_error()); $row_ecom = mysql_fetch_array($res_ecom); echo 'Купить шлюз '.$row_ecom['vendor'].' '.$row_ecom['vendorCode'].' можно в нашем магазине Merion Shop по ссылке ниже. А по промокоду "WIKIMERIONET" вы можете получить дополнительную скидку. С настройкой поможем 🔧 Купить '.$row_ecom['model'].''.number_format(intval($row_ecom['price']) * (1 - (intval($row_ecom['discount'])) / 100), 0, ',', ' ').' ₽'; $dbName = "to-www_02"; mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение "); mysql_select_db($dbName) or die(mysql_error()); FXO – аналоговый порт, который находится на оконечных устройствах. Обычно стоит в телефонных аппаратах. В шлюзах используется для подключения аналоговой линии от провайдера. Для подключения шлюзов Yeastar TA FXO необходимо сделать следующее. В качестве примера будет использоваться Yeastar TA1610. Подключитесь к веб-интерфейсу шлюза Yeastar TA FXO. Перейдите в меню «Шлюз», затем в раздел «VoIP-настройки», в пункт «VoIP-линии». Нажмите «Создать». Выберите «Тип линии» - Аккаунт и «Тип» - SIP. Задайте «Имя» – произвольное имя линии, которое будет отображаться в списке линий веб-интерфейса шлюза. Укажите «Аккаунт» и «Пароль» – учётные данные, которые будут использоваться для регистрации FreePBX на шлюзе. В веб-панели FreePBX перейдите в меню «Подключения», подменю «Транки». Нажмите «Добавить SIP (chan_sip) транк». Задайте «Название транка». Перейдите во вкладку «SIP Общие настройки». Во вкладке «Исходящий» задайте «Название транка», введите конфигурационные данные транка в поле «Опции для PEER». Перейдите на вкладку «Входящий». В поле «Строка регистрации» укажите аккаунт и пароль для регистрации FreePBX на шлюзе. Сохраните и примените настройки. В веб-интерфейсе шлюза Yeastar TA FXO перейдите в раздел «Статус», подраздел «Линии». Проверьте статус входящей регистрации FreePBX на шлюзе. В консоли FreePBX можно проверить статус регистрации с помощью команд asterisk -vvvr sip show peers Для того, чтобы вызовы начали проходит на шлюз и обратно, необходимо настроить входящую и исходящую маршрутизацию. Перейдите в меню «Шлюз», раздел «Маршрутизация». Откройте подраздел «VoIP -> Порт FXO». Нажмите «Создать». Укажите удобное Вам имя в «Имя маршрута». Выберите «Упрощенный режим» – Да. В поле «Источник» выберите созданный ранее аккаунт SIP. В поле «Назначение» выберите тот аналоговый порт, на который Вы хотите отправлять вызов и в который подключена аналоговая линия. Перейдите в меню «Шлюз», раздел «Маршрутизация». Откройте подраздел «Порт FXO -> SIP». Нажмите «Создать». Укажите удобное Вам имя в «Имя маршрута». Выберите «Упрощенный режим» – Да. В поле «Источник» выберите тот аналоговый порт, с которого Вы хотите принимать вызов и в который подключена аналоговая линия. В поле «Назначение» выберите созданный ранее аккаунт SIP. Теперь необходимо произвести аналогичную настройку в веб-панели FreePBX. Перейдите в раздел «Подключения», подраздел «Исходящая маршрутизация». Нажмите «Добавить исходящий маршрут». Задайте «Название маршрута». В поле «Последовательность транков» выберите ранее созданные транк. Перейдите на вкладку «Правила набора». В первой строке «Совпадение шаблона» задайте маску для отправки вызовов с номером через транк. Для пример используется 50XX. Cохраните маршрут и примените изменения. Проверить направление вызова через созданный транк можно в консоли FreePBX. Для этого используется команда asterisk -vvvr В веб-панели FreePBX перейдите в раздел «Подключения», подраздел «Входящая маршрутизация». Нажмите «Добавить входящий маршрут». Задайте имя маршрута в поле «Описание». В поле «Установить направление» выберите «Внутренние номера» и номер, на который будет направляться входящий вызов. Для примера используется номер 4511. Сохраните маршрут и примените изменения. Проверить прием входящего вызова через созданный транк и отправку вызова на внутренний номер можно в консоли FreePBX. Для этого введите команду asterisk -vvvr
img
Модуль – это функция или набор похожих функций. Они собраны вместе внутри одного файла и содержат код. Когда в более крупном приложении вызывается та или иная функция, этот код выполняет свою задачу.  Модули создаются для того, чтобы можно было лучше организовать и структурировать кодовую базу. Их можно использовать для того, чтобы разбить большую программу на более мелкие подпрограммы, которые будут более управляемыми и в большей степени независимыми. Эти подпрограммы могут выполнять одну или несколько взаимосвязанных задач. Модули могут быть:  Независимыми/автономными : модуль отделен от остальных зависимостей настолько, насколько это возможно. Специального назначения : модуль должен выполнять одну задачу и группу взаимосвязанных задач. Основная суть, для чего они создаются, заключается в создании отдельных функций. Один модуль – одна задача (или один вид задач).  Многократного применения : модуль легко интегрируется в различные программы, в которых он выполняет свою задачу. Чтобы вам было более понятно, я проведу аналогию: Допустим, мы хотим построить огромный дом с нуля. Все инструменты, которые нам понадобятся для того, чтобы построить здание, находятся в одной комнате.  В этом случае правильно разложить все инструменты для того, чтобы мы могли начать строить, будет не так просто. Вместо того, чтобы держать все отдельные зависимости в одной комнате, нам стоит собрать отдельные наборы взаимосвязанных инструментов и поместить их в разные комнаты. В каждой комнате находятся свои инструменты, и каждая из них является независимой и автономной и решает определенные задачи.  Мы вполне могли бы наклеить на них какие-нибудь надписи, например,  «инструменты для кровельных работ», «инструменты для кирпичной кладки», «инструменты для рытья котлована под фундамент» и т.д. Всякий раз, когда нам потребуется тот или иной инструмент для того, чтобы выполнить определенную задачу, мы знаем, в какой комнате он лежит. В этом плане все стало гораздо более организовано, и все можно легко найти. Более того, допустим, что мы уже построили дом и решили построить что-то еще. Для этого у нас есть все тот же набор инструментов. Этот факт подкрепляет принцип  многократного использования . Модули можно использовать многократно, так как они являются автономными.  Пример модуля Если говорить о коде, то модули очень важны. Давайте рассмотрим упрощенную схему на примере приложения электронной коммерции, с помощью которого люди и предприятия могут продавать товары через Интернет. Как правило, такого рода программы состоят не менее, чем из двух несвязных задач. Например,  программа, предназначенная для создания учетной записи программа, предназначенная для проверки достоверности информации еще одна программа, предназначенная для обработки платежей еще одна программа, предназначенная для подсчета рейтинга пользователей и т.д. Вместо того, чтобы объединять все эти несвязные программы в один модуль/файл, можно создать несколько различных файлов или модулей, каждый из которых будет отвечать за отдельную задачу. В таком случае модули становятся зависимостями. После чего вы можете просто импортировать/загрузить эти зависимости (то есть необходимые модули) из основного приложения или программы и, таким образом, подключить их. В конечном итоге ваше основное приложение станет не таким загроможденным. main.js был разделен на четыре модуля Допустим, что вы хотите внести в кодовую базу какого-то другого приложения код для обработки платежей. Тогда вы можете воспользоваться уже существующей функцией. Вам не нужно копировать и вставлять эту функцию или писать ее с нуля.  Модули JavaScript Модуль в JavaScript – это обычный файл, который содержит соответствующий код.  В JavaScript для использования и получения функций соответствующих модулей, мы используем ключевые слова  import и  export . Ключевое слово  export применяется для того, чтобы переменная, функция, класс или какой-то другой объект стал доступным для других модулей. Иными словами, он становится общедоступным кодом.  Ключевое слово  import применяется для того, чтобы загрузить общедоступный код из другого модуля.  Давайте посмотрим на простой пример: function getPower(decimalPlaces) { return 10 ** decimalPlaces; } function capitalize(word) { return word[0].toUpperCase() + word.slice(1); } function roundToDecimalPlace(number, decimalPlaces = 2) { const round = getPower(decimalPlaces); return Math.round(number * round) / round; } { capitalize, roundToDecimalPlace }; filepath/main.js В этом модуле определены три функции: getPower : эта функция получает в качестве аргумента показатель степени числа capitalize : эта функция делает первую букву слова заглавной roundToDecimalPlace : эта функция округляет число, переданное в качестве аргумента, до указанного количества знаков после запятой В самом конце файла мы можем видеть, что две из трех функции были экспортированы. Иными словами, эти функции стали общедоступными, и их теперь можно использовать в любом другом сценарии.  Для того, чтобы экспортировать две из трех функции, вы должны записать ключевое слово  export , а за ним должен последовать объект, который содержит те функции, которые вы хотите, чтобы были общедоступными. После того, как вы это сделаете, любая программа в рамках кодовой базы сможет получить доступ к этим функциям.  Давайте посмотрим, как мы можем их использовать: import { capitalize, roundToDecimalPlace } from './main'; function displayTotal(name, total) { return `${capitalize(name)}, your total cost is: ${roundToDecimalPlace(total)}`; } displayTotal('kingsley', 20.4444444); // "Kingsley, your total cost is: 20.44" export { displayTotal }; filepath/displayTotal.js У модуля  displayTotal.js нет функций  capitalize() и  roundToDecimalPlace() , но вам нужно, чтобы у него были такие функциональные возможности. И как же мы можем это сделать? С помощью  import ! Мы сделали это с помощью ключевого слова  import , указав за ним имя функций, которые мы хотели бы импортировать из модуля. В данном случае это функции  capitalize и  roundToDecimalPlace . А что если вам нужно импортировать в свою программу только одну функцию -  capitalize ? Все очень просто – импортируйте только функцию  capitalize . Например, import { capitalize } from './main'; function warn(name) { return `I am warning you, ${capitalize(name)}!`; } warn('kingsley'); // I am warning you, Kingsley! export { warn }; Обратите внимание: когда вы работаете с модулями, очень важно понимать принцип работы структурирования файлов. В примере выше мы просто импортируем функцию из файла, который находится в том же самом каталоге. Именно поэтому мы используем обозначение « ./import ».  Если вы хотите импортировать все общедоступные функции из какого-то модуля, то вам нужно использовать символ * в качестве ключевого слова: import * as mainfunctions from './main'; function warn(name) { return `I am warning you, ${mainfunctions.capitalize(name)}!`; } warn('kingsley'); // I am warning you, Kingsley! export { warn }; Совет : если вы импортируете из модуля все функции, то лучше всего воспользоваться звездочкой, а не явно перечислять все функции одну за другой.  Вы могли заметить еще одно ключевое слово -  as . Мы используем его для того, чтобы импортировать общедоступные функции в новый объект (в данном случае это  mainfunctions ). После чего мы можем использовать и вызывать функции, которые нам нужны в нашей программе.  Вплоть до этого момента мы рассматривали примеры, где экспорт выполняется в конце файла. Но вы также можете экспортировать функцию, переменную или класс, прописав слово  export прямо перед его определением. Например,  function getPower(decimalPlaces) { return 10 ** decimalPlaces; } export function capitalize(word) { return word[0].toUpperCase() + word.slice(1); } export function roundToDecimalPlace(number, decimalPlaces = 2) { const round = getPower(decimalPlaces); return Math.round(number * round) / round; filepath/anothermai.js Если вы сравните данный пример с первым, то заметите разницу в синтаксисе: В первом примере ключевое слово  export применяется в конце сценария для экспорта сразу двух функций. А в примере выше ключевое слово  export применяется для каждой функции при ее определении.  В любом случае, результат один: обе функции:  capitalize и  roundToDecimalPlace , были экспортированы.  Экспорт функции по умолчанию Если вы планируете экспортировать все три функции, но хотите, чтобы одна из них была функцией по умолчанию (возможно из-за того, что вы, вероятнее всего, будете использовать только эту функцию), вам просто нужно указать ключевое слово  default .  Ключевое слово  default упрощает процесс импорта функции. Давайте посмотрим на следующий пример: export function getPower(decimalPlaces) { return 10 ** decimalPlaces; } export default function capitalize(word) { return word[0].toUpperCase() + word.slice(1); } export function roundToDecimalPlace(number, decimalPlaces = 2) { const round = getPower(decimalPlaces); return Math.round(number * round) / round; } filepath/default.js Как вы можете видеть, функция  capitalize стала функцией по умолчанию. Фактически мы наделили ее какими-то привилегиями.  Допустим, что мы хотим импортировать функцию  capitalize из модуля в другую программу. Синтаксис будеТ примерно такой же, разница будет лишь в том, что вам не нужно будет указывать функцию в фигурных скобках: import capitalize from './main'; function warn(name) { return `I am warning you, ${capitalize(name)}!`; } warn('kingsley'); // I am warning you, Kingsley! export { warn }; filepath/warndefault.js Если вы хотите импортировать какие-то другие функции вместе с функцией по умолчанию, то вы должны через запятую указать «голую» функцию по умолчанию и другие функции в фигурных скобках: import capitalize, { getPower } from './main'; function warn(name) { return `I am warning you, ${capitalize(name)}!`; } warn('kingsley'); // I am warning you, Kingsley! export { warn }; filepath/mixed.js Заключение Модули – это независимые и автономные фрагменты кода. Вы можете создать их, разбив большую программу на логические части, или зависимости.  Модули должны быть независимыми, иметь специальное назначение и предоставлять возможность многократного использования. Для того, чтобы обмениваться функциями между модулями в JavaScript, вам понадобятся ключевые слова  import и  export . Для того, чтобы указать, какую функцию, объект, переменную или класс вы хотите импортировать в первую очередь, вам понадобиться ключевое слово  default . Таким образом, мы пробежались по основным концепциям модулей в JavaScript.
ЗИМНИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59