Могу ли я заставить Reason+React импортировать модуль реакции из CDN?

Создание компонента с помощью Reason и React всегда дает мне оператор импорта модуля для "реакции", который не может быть найден, если React включен из CDN. Есть ли решение для этого? Я пытался определить window.react = React в index.html безуспешно. es6-global установка ничего не меняет.

Я не использую пакетную программу, такую ​​как webpack.

Изменить: возможно, соответствующая тема на форуме Reason: https://reasonml.chat/t/can-one-load-reasonml-es6-modules-without-a-bundler/2219

Похожая проблема (не решена): можно ли загружать модули reasonml es6 без сборщика

importmap(еще не реализовано в браузерах) может быть другим решением для этого: использование модулей ES6 без шага Transpiler/Bundler

1 ответ

Решение

Технически, да, можно, но это будет не так просто, как использовать поток npm и использовать сборщик.

Привязки ReasonReact написаны таким образом, что на выходе создается JavaScript, который импортирует такие модули, как:

import * as React from "react";

(При использовании стиля модуля ES6.)

Если вы используете CDN, вы, вероятно, захотите получить следующий результат:

import * as React from "https://some.cdn/react";

Синтаксис (из репозитория ReasonReact), который контролирует выходной JS:

[@bs.module "react"]
external createElement: (component('props), 'props) => element = "createElement";

Если вы изменили его на:

[@bs.module "https://some.cdn/react"]
external createElement: (component('props), 'props) => element = "createElement";

... тогда вы получите желаемый результат. Но проблема в том, что вам нужно изменить источники... то есть поддерживать или находить разветвленные привязки для React для этого CDN. Или настройте автоматизацию кода, которая выполняет поиск и замену [@bs.module "react"] с участием [@bs.module "https://some.cnd/react"]. Так или иначе, это не так просто, как использовать упаковщик.

Другие вопросы по тегам