如何为第三方网站创建可嵌入的 next.js (react) 组件?

2023-11-22

我正在尝试为我们的客户创建小部件以粘贴(嵌入)到他们自己的网站中。

理想情况下由第三方使用,如下所示:

example.html

<div id="example"></div>
<script src="https://example.com/widgets/example.bundle.js"></script>
<script>
Example.init({
    selector: "#example",
    name: "example"
});
</script>

我只是不知道如何使用 next.js 将特定入口点“捆绑”到单个文件中。

我使用的是从 GitHub 构建的 Vercel,因此理想情况下我希望在构建时生成这些捆绑包,而不会破坏现有的 next.js 站点。

我尝试过的:

next.config.js

module.exports = {
    entry: {
        example: './pages/example.js'
    },
    output: {
        path: "./public/widgets",
        filename: '[name].bundle.js'
    }
}

Result:

这没有任何效果,我不明白为什么! :(

有用的来源:

Github(Next.js 讨论):添加一个 Webpack 条目以与 main.js 分开加载

Next.js:自定义 Webpack 配置

Next.js:设置自定义构建目录

Next.js:exportPathMap

Stackoverflow:使用 React 和 Webpack 编写可嵌入的 Javascript 插件

Webpack:配置文档


首先,您想要的嵌入/初始化格式(这当然是可嵌入小部件的典型格式)要求加载的脚本创建Example全局对象,然后您可以调用它.init(),然后将您的小部件 html 渲染到选择器中指定的标签中。

接下来创建一个完整的页面,而不是如上所述可以调用的对象。

要改变这个你需要覆盖下一个服务器绕过整个app.render()处理特定的 url,而是创建Example对象,它自己调用ReactDOM.render() on .init().

您还需要解决两种可能的情况:嵌入您的小部件的网页可以是基于 React 的页面,也可以不是。因此,您要么需要使用已经加载的 ReactDOM,要么让浏览器加载 React,然后才能渲染您的小部件。

虽然所有这些都是可行的,但要使其健壮并不容易,并且在 NextJS 中进行会使其更加麻烦。我的建议是以这样的方式构建 NextJS 应用程序的代码,即您在小部件中需要的部分是可以在 NextJS 主应用程序和使用普通 CRA 的单独的可嵌入小部件中使用的组件。

一些进一步阅读:

https://selleo.com/blog/how-to-create-embedded-react-widget(但不是 iFrame 部分)

https://meda.io/embed-react-into-an-html-web-page/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何为第三方网站创建可嵌入的 next.js (react) 组件? 的相关文章

  • 如何在hostinger中部署nextjs项目

    有谁知道如何在托管共享主机中部署 nextjs 项目 我被困在这里 托管提供商有 hpanel 而不是 cpanel 并且您没有任何安装 nodejs 的选项 我很失望 我才订阅一年 现在我不知道该怎么办 我试图将构建的文件夹 next在
  • 如何聚焦反应路由器链接

    我有一个用于搜索的输入框 并且希望能够按向下键将焦点从输入移动到列表的第一个s 看来我这里的东西不起作用 因为不是实际的 DOM 节点 我能够使用它来工作 a 代替 though let Link require react router
  • Nextjs 无法在生产环境中的“.next”目录中找到有效的构建

    我正在 docker 中运行我的应用程序 但我的生产构建和启动脚本仅在 docker 环境中失败 虽然node env开发在docker环境下运行良好 这是我的脚本 无法进行生产构建并启动服务器 我正在使用nodemon和babel bui
  • React + Semantic-UI:在 UI MODAL 中使用表单

    在没有 React 的普通旧 Semantic UI 中 我已经能够毫无问题地将表单放入 Modal 中 使用 Semantic UI React 版本 我能够在模态中显示表单 但它并没有按照我期望的方式工作 例如 模态框显示后 模态框内的
  • 纱线安装错误:无法下载Chromium

    Yarn 安装无法下载 Chromium 错误如下 D workspace www ant design mobile pro yarn yarn install v1 12 3 Directory D workspace www ant
  • 从 React Native Js 代码调用 Android Native UI 组件方法

    我创建了一个 CustomView SignatureView java 它扩展了 LinearLayout 以捕获 Android Native 中的签名 并创建了SignatureCapturePackage java和Signatur
  • React autoFocus 将光标设置为输入值的开头

    我有一个受控输入 最初显示一个值 我已将该输入设置为自动聚焦 但当我希望它出现在末尾时 光标出现在输入的开头 我知道这可能是因为自动对焦是在值之前添加的 但我不能 100 确定 在输入字段末尾完成光标初始化的最佳方法是什么 var Test
  • 如何从 Chrome React Dev Tools 打开 VS code 中的组件文件?

    是否可以右键单击 React Dev 工具下可见的组件 然后单击 在 IDE 中显示 从而在 VSCode 中打开该文件 这将是有益的 因为我不必去寻找该组件 我经常想在 VS Code 中查看某个组件的源代码 但由于组件的模块化复用 代码
  • 使用 Enzyme 测试 `React.createRef` api

    我想测试下面的类 它使用React createRef api 不过 快速搜索并没有发现任何这样做的例子 有人成功过吗 我该如何嘲笑裁判 理想情况下我想使用shallow class Main extends React Component
  • Webpack 4:如何使用 LESS 获取 CSS 源映射?

    多年来我一直在尝试让 CSS 源映射在 webpack 中工作 但没有成功 我不确定链条中哪里出了问题 我希望有人能指出我正确的方向 这是发生的事情 行号是错误的 实际上文件名也是错误的 main less只是包含一堆 import也就是说
  • 是否可以在 React Native 中隐藏“BugReporting extraData”? (使用世博会)

    每次我使用 Expo 打开 React Native 应用程序时 我都会在控制台中收到大量消息 其中包含有关该应用程序的元数据 这实际上对我的调试没有多大帮助 特别是因为它每次都是相同的信息 并且每次应用程序重新加载时都会显示 即使是热重新
  • 在react中使用map方法渲染JSON API

    我对 JSON 对象 数组和映射方法的语法和结构有困难 我是 React 新手 正处于学习的初始阶段 这是我粘贴在下面的 JSON 文件代码 cloud Asia availability last15Min 100 last24Hour
  • 在 Webpack 中的不同配置导出上应用 CommonsChunkPlugin?

    我正在开发一个由以下 实体 组成的项目 静态网站的几个页面 An app 管理仪表板 在我最初的webpack config我将每个实体作为不同的实体进行处理的设置entry点 例如 我会有类似的东西 entry vendor jquery
  • React 设置背景颜色与状态 rgb

    所以我根据数据库的结果生成一个表 在数据库中我保留 rgb 值 例如 75 75 75 现在当我生成列表时 我想使用保存的值设置我的 td 的背景 tbody this state boxes map box i gt tr td box
  • webpack 4 React loadable 不会根据卡盘点分割供应商

    我目前正在使用 webpack 4 和 React loadable 来创建块 它实际上分块取决于断点 然而 供应商规模保持不变 React loadable 还不支持 webpack 4 吗 或者我缺少一些设置 css 实际上似乎被分成了
  • Jest 和 React 以及导入 CSS 文件时出现语法错误

    我正在尝试让我的第一个 Jest 测试通过 React 和 Babel 我收到以下错误 SyntaxError Users manueldupont test avid sibelius publishing viewer src comp
  • Eslint errorring 导入没有扩展名的 jsx

    我正在尝试在 es6 中导入 jsx 文件而不需要 jsx 扩展名 import LoginErrorDialog from LoginErrorDialogView Not import LoginErrorDialog from Log
  • 如何在react-bootstrap中禁用表单提交的

    在下面的代码片段中 我有许多文本类型的输入表单 如果用户点击 我似乎会得到相同的合成事件 就像他们按下提交按钮一样 我想忽略作为表单提交 只允许一个人按下 提交 按钮 我删除了一些表单组以减少示例 在所有情况下 按钮或 ENTER 键 e
  • React-Redux:state.setIn() 和 state.set() 有什么区别?

    我见过使用setIn and set 在一些react redux代码中 state setIn state set 我在这里找到了一些文档https facebook github io immutable js https facebo
  • 如何渲染变量(或 prop)内部的 jsx/html?

    const Footer gt let a b Hey b return div Some bold text a div 这只会呈现为Some bold text b Hey b 如何将粗体文本渲染为粗体 变量内容是我自己的 所以我不必担

随机推荐