Nano Hash - криптовалюты, майнинг, программирование

Как повторно использовать определенный веб-компонент из микро-интерфейса в слое сшивки?

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

Я уже выбрал путь IFrame и использую single-spa, которые работают, но на этот раз я безуспешно пытаюсь использовать веб-компоненты. Я также пытался добавить микро-интерфейс в контейнер докеров, но это не принесло никаких изменений.

Я определяю свой настраиваемый элемент в микро-интерфейсе следующим образом:

class CommentSection extends HTMLElement {
  connectedCallback() {
    ReactDOM.render(<App />, this.attachShadow({mode: 'open'}));
  }
}
window.customElements.define('comment-section', CommentSection);

Я использую его в микро-интерфейсе index.html:

<comment-section></comment-section>

Пока все работает. Моя проблема возникает, когда я пытаюсь использовать его из слоя сшивания.

В приложении React я создал server.js файл для передачи содержимого:

server.get('/', (req, res) => {
  const htmlPath = path.resolve(__dirname, 'build', 'index.html');

  fs.readFile(htmlPath, 'utf8', (err, html) => {
    const rootElem = '<comment-section>';
    const renderedApp = renderToString(React.createElement(App, null));

    res.send(html.replace(rootElem, rootElem + renderedApp));
  });
});

server.use(express.static('build'));

и из слоя сшивания, создав прокси к микро-интерфейсу:

app.use(express.static(__dirname + '/public'));

const createProxy = (path, target) => {
    app.use(path, proxy({ target, changeOrigin: true, pathRewrite: {[`^${path}`]: ''} }));
}

createProxy('/react', 'http://localhost:3000');

app.get('/', (req, res) => res.render('index'));

и импортируем его вот так в сшивке index.html:

<head>
  <link href="/react" rel="import" async/>
</head>
<body>
  <comment-section></comment-section>
</body>

Я ожидаю, что веб-компонент будет отображать компонент реакции в слое сшивки, как это происходит, когда я запускаю микро-интерфейс изолированно, но фактический результат заключается в том, что весь код находится под тегом импорта link html и ничего не отображается под тегом веб-компонента.

микро-интерфейс веб-компонента  микро-интерфейс веб-компонента

слой сшивания веб-компонентов  слой сшивки веб-компонентов


Ответы:


1

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

Итак, чтобы отобразить веб-компонент, вам просто нужно добавить скрипт в целевой html, <script src="/static/js/xxx.js"></script> в вашем случае, и все. Не требуется Docker, Proxy и т. Д.

Другими словами: вы должны использовать веб-компонент, где бы вы его ни разместили, точно так же, как в вашем файле index.html "микро-интерфейса".

И об этом <link ref="import">: импорт HTML устарел (Chrome: https://www.chromestatus.com/feature/5144752345317376 Firefox: https://developer.mozilla.org/en-US/docs/Web/Web_Components/HTML_Imports)

15.05.2019
  • Я понимаю вашу точку зрения и упомянул, что нашел некоторые решения, которые работают, но, к сожалению, они упускают из виду всю суть того, чего я пытаюсь достичь. Я пытаюсь загрузить веб-компонент из удаленного места, а не из локального файла js. Я показал разницу между рабочим решением и моей проблемой на скриншотах выше. Я не уверен, достаточно ли ясно выразился, но, надеюсь, да. 17.05.2019
  • не имеет значения, откуда вы загружаете javascript. очень распространенное использование - размещение файлов javascript в какой-либо сети доставки контента. загрузите свой javascript откуда угодно и используйте тег настраиваемого элемента, он просто работает. просто замените относительный URL-адрес src на абсолютный, т.е. <script src="https://your-server/static/js/xxx.js"></script> 17.05.2019
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..