前后端不分离项目导入react模块

news/2024/7/15 17:26:37 标签: react.js, javascript, 前端

前言

  • 我最近在整一个前后端不分离使用.net写的项目。这种前后端不分离的都是有类似的模板渲染。我们肯定不继续写.net了,所以需要自己的react组件导入进来。
  • 本来我一开始想着react打包umd进行引入,使用tsdx配合http-server就可以进行开发了,但是后来觉得不是太好,如果项目越来越大,那么这个umd包就越来越大。所以最好使用多入口打包成mpa方式自己修改打包配置,或者使用现成的东西。
  • 然后我就发现可以使用icestark的微模块进行引入。脚手架里多入口打包已经配好了。

官网

  • https://micro-frontends.ice.work/docs/guide/micro-module#api
  • 注意,这个微模块我发现有点小bug,但不影响正常显示。

改造流程

  • 首先利用它给的脚手架创建项目:
# 创建文件夹
$ mkdir micro-module & cd micro-module

# 初始化
$ iceworks init component @icedesign/template-icestark-module

# 安装依赖
$ npm install
$ npm start
  • 然后你需要配置你的入口地址:
// build.json
{
  "plugins": [
    ["build-plugin-stark-module", {
      "modules": {
        "branch-detail": "./src/branch-detail/index.tsx",
        "edit-info": "./src/edit-info/index.tsx"
      }
    }]
  ]
}
  • 写对应的react组件。
  • 在原生js中,由于没有jsx,所以我们需要在html上一开始就导入react,react-dom,以及用于渲染的micromodule。
  • micromodule可以单独配置成一个入口,一开始就加载它,每个modules入口都是一个umd,icestark会额外给这个导出对象添加mount与unmount方法。
  • 配置micromodule入口
"build-plugin-stark-module",
			{
			  ...
				"modules": {
					"globalmodule": "./src/globalmodule/index.tsx",
  • micromodule直接导出即可:
import { MicroModule } from "@ice/stark-module";

export { MicroModule };
  • 如果需要配置external :
// build.json
"build-plugin-stark-module",
			{
			 ...
				"moduleExternals": {
					"react": {
						"root": "React",
						"url": "https://g.alicdn.com/code/lib/react/16.14.0/umd/react.production.min.js"
					},
					"react-dom": {
						"root": "ReactDOM",
						"url": "https://g.alicdn.com/code/lib/react-dom/16.14.0/umd/react-dom.production.min.js"
					},
			}
  • 我们在html上由于预先加载了micromodule的umd,所以可以从window上拿到它:
	const MicroModule = window["yourmicromodule"].MicroModule;
		const moduleInfo = {
			name: "moduleA",
			url: [
				"http://localhost:8080/build/moduleA/index.js",
				"http://localhost:8080/build/moduleA/index.css",
			],
			runtime: "http://localhost:8080/build/moduleA/runtime.json",
		};
  • 然后获取id的dom使用react-dom进行渲染即可:
			ReactDOM.render(
				React.createElement(MicroModule, { moduleInfo }),
				document.getElementById("myroot")
			);
  • 如果需要卸载:
ReactDOM.unmountComponentAtNode(document.getElementById("myroot"));

http://www.niftyadmin.cn/n/189903.html

相关文章

【软件测试】基础知识第一篇

文章目录一. 什么是软件测试二. 测试和调试的区别三. 什么是测试用例四. 软件的生命周期五. 软件测试的生命周期一. 什么是软件测试 软件测试就是验证软件产品特性是否满足用户的需求。 那需求又是什么呢?在多数软件公司,会有两种需求,一种…

DataGrid第一列复选框CheckBox且绑定viewmodel数据示图,绑定方法怎么写

<DataGridTemplateColumn ><DataGridTemplateColumn.Header><CheckBox x:Name"ckall" Content"全选" Command"{Binding DataContext.All_Click,RelativeSource{RelativeSource FindAncestor, AncestorType{x:Type DataGrid}}}"…

Python网络编程实战:实现一个简易版Web服务器

一、简介 本篇文章将通过实现一个简易版的Web服务器&#xff0c;帮助读者理解Python网络编程的基本概念和技巧。我们将分为以下几个部分来展开本文的内容&#xff1a; Web服务器基础概念Python网络编程库实现简易Web服务器处理HTTP请求返回静态文件测试与优化总结及拓展 二、…

462. 最小操作次数使数组元素相等 II——【Leetcode每日一题】

462. 最小操作次数使数组元素相等 II 给你一个长度为 n 的整数数组 nums &#xff0c;返回使所有数组元素相等需要的最小操作数。 在一次操作中&#xff0c;你可以使数组中的一个元素加 1 或者减 1 。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;2 …

Linux 时间、时区设置

Linux 时间、时区设置 CentOS 7: Chrony https://chrony.tuxfamily.org/index.html https://www.cnblogs.com/zydev/p/15688530.html CentOS 6: NTP https://www.cnblogs.com/liushui-sky/p/9203657.html 如何选择 ECS 实例本地时间同步方案 https://help.aliyun.com/document_…

ref,reactive,toRef和toRefs

1.reactive reactive根据传入的对象&#xff0c;创建一个深度响应式对象。响应式对象属性值改动&#xff0c;不管层级多深&#xff0c;都会触发响应式。reactive只能给对象添加响应式&#xff0c;对于值类型&#xff0c;比如String,Number,Boolean,Symbol是不可以的不能通过…p…

计算机组成原理 --- 数据的表示和运算

一.进位计数制 1.由位置确定的权重为位权 --- 比如个位的位权是10的0次方&#xff0c;十位的位权是10的1次方... 1.十进制的基数是 --- 0&#xff0c;1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5&#xff0c;6&#xff0c;7&#xff0c;8&#xff0c;9 &#xff…

Visual Studio Code 1.77 发布,扩展的 GitHub Copilot 集成

VS Code 1.77 已发布&#xff0c;此版本一些主要亮点包括&#xff1a; Accessibility 改进 - 用于悬停、通知和 Sticky Scroll 的新键盘快捷键。 、down、home、end、page up和page down 键来聚焦悬停控件并进行水平和垂直滚动。聚焦悬停控件的键盘快捷键(CtrlK CtrlI)与用于在…