1

使用 Reason 和 React 构建组件总是会给我一个“react”的模块导入语句,如果 React 包含在 CDN 中,则无法找到该语句。有解决方案吗?我试图window.react = React在 index.html 中定义但没有成功。es6-global设置不会改变任何东西。

我没有使用像 webpack 这样的捆绑程序。

编辑:来自原因论坛的可能相关线程:https ://reasonml.chat/t/can-one-load-reasonml-es6-modules-without-a-bundler/2219

类似问题(未解决):可以在没有捆绑器的情况下加载 reasonml es6 模块

importmap(尚未在浏览器中实现)可能是另一种解决方案:Using ES6 Modules without a Transpiler/Bundler step

4

1 回答 1

3

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

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

import * as React from "react";

(如果使用 ES6 模块样式。)

如果使用 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"]。所以无论哪种方式,它都不像使用捆绑器那么简单。

于 2020-11-07T00:24:36.680 回答