Дата последнего изменения: 15.02.2023
На текущий момент в рамках Bitrix Framework нельзя подключить модули через
npm
npm — менеджер пакетов, входящий в состав Node.js.
Подробнее...
(папку node_modules), но такую поддержку мы прорабатываем и добавим, как только она будет реализована. Сейчас для использования внешних библиотек необходимо собрать их в формате Bitrix
JS Extension
Расширение (экстеншн, extension) — способ организации JS и CSS кода в продуктах 1С-Битрикс: Управление Сайтом и Битрикс24.
Подробнее...
.
Таким образом, чтобы взять внешнюю библиотеку и встроить её, нужно найти подходящую версию ESM ESM (или модули ECMAScript) — это формат модуля, созданный как часть стандарта ECMAScript. Он был стандартизирован в версии ES6 ECMAScript. ES Modules призван решить важную проблему в JavaScript: отсутствие встроенного способа обмена кодом между сценариями. , а затем "обернуть" её в Bitrix JS Extension (экстеншн) с понятным экспортом.
Рассмотрим на примере vue-router (есть в исходном коде поставки в папке /bitrix/modules/ui/install/js/ui/vue3/router/
).
Алгоритм следующий:
Пример vue-router.js из папки /bitrix/modules/ui/install/js/ui/vue3/router/src/
:
/*! * vue-router v4.0.12 * (c) 2021 Eduardo San Martin Morote * @license MIT * * @source: https://unpkg.com/vue-router@4.0.12/dist/vue-router.esm-browser.js */ /** * Modify list for integration with Bitrix Framework: * - remove import '@vue/devtools-api', add function setupDevtoolsPlugin */ import { getCurrentInstance, inject, onUnmounted, onDeactivated, onActivated, computed, unref, watchEffect, defineComponent, reactive, h, provide, ref, watch, shallowRef, nextTick } from 'ui.vue3'; function getDevtoolsGlobalHook() { return getTarget().__VUE_DEVTOOLS_GLOBAL_HOOK__; } function getTarget() { // @ts-ignore return typeof navigator !== 'undefined' ? window : typeof global !== 'undefined' ? global : {}; } const HOOK_SETUP = 'devtools-plugin:setup'; function setupDevtoolsPlugin(pluginDescriptor, setupFn) { const hook = getDevtoolsGlobalHook(); if (hook) { hook.emit(HOOK_SETUP, pluginDescriptor, setupFn); } else { const target = getTarget(); const list = target.__VUE_DEVTOOLS_PLUGINS__ = target.__VUE_DEVTOOLS_PLUGINS__ || []; list.push({ pluginDescriptor, setupFn }); } } // origin-start [... здесь код оригинальной библиотеки ...] export { NavigationFailureType, RouterLink, RouterView, START_LOCATION_NORMALIZED as START_LOCATION, createMemoryHistory, createRouter, createRouterMatcher, createWebHashHistory, createWebHistory, isNavigationFailure, matchedRouteKey, onBeforeRouteLeave, onBeforeRouteUpdate, parseQuery, routeLocationKey, routerKey, routerViewLocationKey, stringifyQuery, useLink, useRoute, useRouter, viewDepthKey }; // origin-end
После вышеописанных действий этот экстеншн можно будет использовать внутри Bitrix Framework.