【问题标题】:Can I make Reason+React import react module from CDN?我可以从 CDN 制作 Reason+React 导入反应模块吗?
【发布时间】:2020-11-07 16:21:57
【问题描述】:

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

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

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

类似问题(未解决):can one load reasonml es6 modules without a bundler

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

【问题讨论】:

    标签: reactjs reason bucklescript reason-react rescript


    【解决方案1】:

    从技术上讲,是的,你可以,但它不会像使用 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 "https://some.cnd/react"] 查找和替换[@bs.module "react"]。所以无论哪种方式,它都不像使用捆绑器那么简单。

    【讨论】:

    • 谢谢!您是否有指向捆绑器在 ReactReason 中运行良好的页面的链接?我希望使用 npm 服务器来提供页面,因为我想将它集成到另一个较旧的网络应用程序中。
    • @OlleHärstedt 不确定您所说的“npm 服务器”是什么意思,但 Webpack 和 Parcel 可以作为打包程序正常工作。后者是零配置。
    猜你喜欢
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 2015-10-26
    • 2021-11-17
    • 2016-07-30
    • 1970-01-01
    相关资源
    最近更新 更多