{
    "componentChunkName": "component---src-templates-doc-page-js",
    "path": "/docs/ru/common/bot_structure/modules/",
    "result": {"data":{"site":{"siteMetadata":{"title":"Gatsby-doc-engine"}},"markdownRemark":{"id":"0360e044-95b3-5444-bdb2-ae10dd1402c7","excerpt":"Зависимости Разрабатывать сложные проекты со множеством тем, справочников и скриптовых расширений может быть неудобно и неэффективно, если хранить весь код…","html":"<h1>Зависимости</h1>\n<hr>\n<p>Разрабатывать сложные проекты со множеством тем, справочников и скриптовых расширений может быть неудобно и неэффективно, если хранить весь код проекта в одном сценарии.</p>\n<p>Вместо этого JAICP позволяет разбивать код сценария на изолированные составные части и подключать их в основной сценарий как <strong>зависимости</strong>. Такой подход имеет ряд преимуществ:</p>\n<ul>\n<li>Благодаря модульной архитектуре проект легче разрабатывать и поддерживать.</li>\n<li>Одну зависимость можно использовать во множестве разных проектов.</li>\n</ul>\n<p class='warn'>В качестве зависимостей также можно подключить <a href=/1.11.7/docs/ru/common/bot_structure/sys_modules  >системные модули</a> — наборы готовых именованных паттернов, функций и т. д.\nИх можно подключить в любой проект без дополнительного объявления.</p>\n<h2>Подключение</h2>\n<p>Зависимости указываются в разделе <code class=\"language-text\">dependencies</code> конфигурационного файла <a href=\"/1.11.7/docs/ru/common/bot_structure/configuration_file\"><code class=\"language-text\">chatbot.yaml</code></a>. В каждом из элементов списка зависимостей должны быть указаны следующие поля:</p>\n<table>\n<thead>\n<tr>\n<th>Поле</th>\n<th>Описание</th>\n<th>Допустимые значения</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code class=\"language-text\">name</code></td>\n<td>Имя зависимости, по которому она будет подключаться в сценарий.</td>\n<td>Произвольная строка.</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">type</code></td>\n<td>Тип зависимости: внешний репозиторий или локальный модуль.</td>\n<td><code class=\"language-text\">git</code>, <code class=\"language-text\">module</code>.</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">url</code></td>\n<td>Адрес внешнего репозитория.</td>\n<td>Строка, начинающаяся с <code class=\"language-text\">https://</code>, <code class=\"language-text\">git://</code> или <code class=\"language-text\">file://</code>.</td>\n</tr>\n<tr>\n<td><code class=\"language-text\">version</code></td>\n<td>Название ветки, где содержится код зависимости.</td>\n<td><code class=\"language-text\">&lt;имя_ветки></code> или <code class=\"language-text\">heads/&lt;имя_ветки></code>.</td>\n</tr>\n</tbody>\n</table>\n<p class='tip'>Поля <code class=\"language-text\">url</code> и <code class=\"language-text\">version</code> применимы только к зависимостям с типом <code class=\"language-text\">git</code>.</p>\n<h2>Локальные модули</h2>\n<p>Зависимости с типом <code class=\"language-text\">module</code> полезны в случае, когда один большой сценарий требуется разбить на множество мелких сценариев в рамках одного проекта.</p>\n<h3>Структура проекта</h3>\n<p>Предположим, что имеется существующий проект, состоящий из двух файлов:</p>\n<ul>\n<li><code class=\"language-text\">main.sc</code> — основной сценарий.</li>\n<li><code class=\"language-text\">offtopic.sc</code> — «болталка» бота: ответы на часто задаваемые вопросы не по теме.</li>\n</ul>\n<p>Пример фрагмента <code class=\"language-text\">offtopic.sc</code>:</p>\n<div class=\"gatsby-highlight\" data-language=\"sc\"><pre class=\"language-sc\"><code class=\"language-sc\"><span class=\"token keyword\">patterns:</span>\n    $you = (~ты/~вы)\n\n<span class=\"token keyword\">theme:</span> /\n\n    <span class=\"token keyword\">state:</span> WhatCanYouDo\n        <span class=\"token storageType\">q!:</span> * {~что * [$you] * (~уметь/научил*/способ*)} *\n        <span class=\"token storageType\">q!:</span> * ([~что] $you/что-то) [еще] * (уме*/мож*/научил*/способ*) [делать] *\n        <span class=\"token storageType\">q!:</span> * как* * $you * [поставлен*/установлен*] (сервис*/программ*) *\n        <span class=\"token variableParameter\">a:</span> Я умею отвечать на вопросы.</code></pre></div>\n<p>Структура директории проекта имеет следующий вид:</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">├── chatbot.yaml\n├── src\n│   ├── main.sc\n│   └── offtopic.sc\n└── test\n    └── test.xml</code></pre></div>\n</br>\n<p>Если «болталку» планируется расширять новой функциональностью, например специализированной темой о вымышленной биографии бота или своими функциями для обработки данных, целесообразно вынести ее в отдельный модуль, независимый от основного сценария.</p>\n<p>В таком случае необходимо создать в корне вложенные директории под основной сценарий, например <code class=\"language-text\">main</code>, и под создаваемую зависимость. Все файлы, относящиеся к зависимости, нужно перенести в эту директорию, добившись следующего расположения файлов:</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">├── main\n│   ├── chatbot.yaml\n│   ├── src\n│   │   └── main.sc\n│   └── test\n│       └── test.xml\n└── offtopic\n    └── src\n        └── offtopic.sc</code></pre></div>\n<p class='warn'>В зависимостях наличие конфигурационного файла <a href=/1.11.7/docs/ru/common/bot_structure/configuration_file  ><code class=\"language-text\">chatbot.yaml</code></a> и <a href=/1.11.7/docs/ru/common/bot_structure/xml  >XML-тестов</a> не требуется.</p>\n<h3>Подключение зависимости</h3>\n<p>Проделайте следующие шаги, чтобы подключить зависимость.</p>\n<ol>\n<li>Перейдите в меню <a href=\"/1.11.7/docs/ru/platform_ux/create-project#%D0%A0%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B0\">редактирования проекта</a>. На вкладке <em>Размещение</em> смените значение поля <em>Путь</em> на название новой корневой директории проекта — <code class=\"language-text\">main</code>.</li>\n</ol>\n<p class='tip'>Если поле <em>Путь</em> не отображается на вкладке, обратитесь к своему аккаунт-менеджеру.</p>\n<ol start=\"2\">\n<li>Укажите в <code class=\"language-text\">chatbot.yaml</code> раздел <code class=\"language-text\">dependencies</code>. В типе зависимости укажите <code class=\"language-text\">module</code>, а в имени — название соответствующей директории:</li>\n</ol>\n<div class=\"gatsby-highlight\" data-language=\"yaml\"><pre class=\"language-yaml\"><code class=\"language-yaml\"><span class=\"token key atrule\">dependencies</span><span class=\"token punctuation\">:</span>\n  <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> offtopic\n    <span class=\"token key atrule\">type</span><span class=\"token punctuation\">:</span> module</code></pre></div>\n<ol start=\"3\">\n<li>Добавьте в сценарный файл <code class=\"language-text\">main.sc</code> название подключаемого файла и имя зависимости при помощи тега <a href=\"/1.11.7/docs/ru/JAICP_DSL/tags/declarative_tags/require\"><code class=\"language-text\">require</code></a>.</li>\n</ol>\n<p>После этого из основного сценария станет доступно содержимое подключенных файлов: стейт <code class=\"language-text\">WhatCanYouDo</code> и именованный паттерн <code class=\"language-text\">$you</code>.</p>\n<div class=\"gatsby-highlight\" data-language=\"sc\"><pre class=\"language-sc\"><code class=\"language-sc\"><span class=\"token keyword\">require:</span> offtopic.sc\n    module = offtopic\n\n<span class=\"token keyword\">theme:</span> /\n\n    <span class=\"token keyword\">state:</span> You\n        <span class=\"token storageType\">q!:</span> * $you *\n        <span class=\"token variableParameter\">a:</span> Я понял, что вы ко мне обратились, но не понял, зачем.\n\n    <span class=\"token keyword\">state:</span> CatchAll\n        <span class=\"token storageType\">q!:</span> *\n        <span class=\"token variableParameter\">a:</span> Извините, я вас не понял.</code></pre></div>\n<h2>Внешние зависимости</h2>\n<p>Если модуль содержит типовую функциональность, которая может потребоваться во множестве разных проектов, ее целесообразно вынести в отдельный проект. Далее такой проект можно переиспользовать, подключив его как зависимость с типом <code class=\"language-text\">git</code>.</p>\n<p class='warn'>Например, в такие зависимости могут быть вынесены готовые фрагменты сценариев, часто используемые функции и справочники.</p>\n<h3>Структура проекта</h3>\n<p>Рассмотрим ранее приведенный пример файла <code class=\"language-text\">offtopic.sc</code>. В случае внешней зависимости его нужно расположить в директории со стандартной структурой:</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">└── src\n    └── offtopic.sc</code></pre></div>\n<p>Далее создайте в корневой директории проекта <a href=\"https://git-scm.com/\" target=\"_blank\" rel=\"noopener noreferrer\">Git</a>-репозиторий и зафиксируйте созданный файл в системе контроля версий, после чего опубликуйте репозиторий.</p>\n<p class='warn'>Репозиторий может быть размещен на любом внешнем хостинге, например <a href=https://bitbucket.org/ target=\"_blank\" rel=\"noopener noreferrer\">Bitbucket</a>, <a href=https://about.gitlab.com/ target=\"_blank\" rel=\"noopener noreferrer\">GitLab</a> или <a href=https://github.com/ target=\"_blank\" rel=\"noopener noreferrer\">GitHub</a>.</p>\n<h3>Подключение зависимости</h3>\n<p>Подключение внешней зависимости отличается от локального модуля необходимостью указать адрес репозитория и нужную ветку:</p>\n<div class=\"gatsby-highlight\" data-language=\"yaml\"><pre class=\"language-yaml\"><code class=\"language-yaml\"><span class=\"token key atrule\">dependencies</span><span class=\"token punctuation\">:</span>\n  <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> offtopic\n    <span class=\"token key atrule\">type</span><span class=\"token punctuation\">:</span> git\n    <span class=\"token key atrule\">url</span><span class=\"token punctuation\">:</span> https<span class=\"token punctuation\">:</span>//github.com/example/offtopic\n    <span class=\"token key atrule\">version</span><span class=\"token punctuation\">:</span> master</code></pre></div>\n<p>После этого из сценария, в который подключена зависимость, так же становится доступно содержимое зависимости.</p>\n<p class='warn'>Вы можете просмотреть код подключенных к проекту внешних зависимостей в <a href=/1.11.7/docs/ru/platform_ux/editor#Зависимости  >редакторе сценариев</a>.</p>","frontmatter":{"title":"","description":null},"headings":[{"value":"Зависимости"}]}},"pageContext":{"slug":"/docs/ru/common/bot_structure/modules/","previous":{"fields":{"slug":"/docs/ru/common/bot_structure/sc/"},"frontmatter":{"title":"","description":null}},"next":{"fields":{"slug":"/docs/ru/common/bot_structure/js/"},"frontmatter":{"title":"","description":null}}}},
    "staticQueryHashes": ["1209419333"]}