我可以从 CDN 制作 Reason+React 导入reactmodule吗?

IT技术 reactjs reason bucklescript reason-react rescript
2021-05-20 03:00:38

使用 Reason 和 React 构建组件总是会给我一个“react”的module导入语句,如果从 CDN 中包含 React,则无法找到该语句。有解决方案吗?我试图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 module吗

importmap(尚未在浏览器中实现)可能是另一种解决方案:使用没有 Transpiler/Bundler 步骤的 ES6 module

1个回答

从技术上讲,是的,你可以,但它不会像使用 npm 流程和使用捆绑器那么容易。

ReasonReact 绑定的编写方式可以生成导入module的输出 JavaScript,例如:

import * as React from "react";

(如果使用 ES6 module样式。)

如果使用 CDN,您可能需要如下所示的输出:

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

控制输出 JS的语法(来自ReasonReact repo)是:

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

如果您将其更改为:

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

...然后你会得到所需的输出。但问题是您需要更改源……即为该 CDN 维护或查找 React 的分叉绑定。或者设置一些代码自动化来查找和替换[@bs.module "react"]with [@bs.module "https://some.cnd/react"]所以无论哪种方式,它都不像使用捆绑器那么简单。