0

0

Webpack 系列第 3 部分

DDD

DDD

发布时间:2024-09-15 18:21:09

|

560人浏览过

|

来源于dev.to

转载

请查找该系列的旧部分以充分理解这个概念。 webpack 5 系列第 1 部分 webpack 5 系列第 2 部分 webpack 5 系列第 4 部分

在线电子商店申请

让我们使用微前端来构建一个在线商店应用程序以实现模块化。每个微前端将代表商店的不同部分,它们将共享公共库,例如 react、设计系统和共享实用程序库。

目标:

  1. productlist 公开可以由其他应用导入和使用的产品列表。
  2. 购物车公开了从购物车添加/删除产品的功能。
  3. 结帐 使用购物车中的数据并处理结帐。

Webpack 系列第 3 部分

模块联合的配置

  • 微前端1:产品列表

公开 productlist 组件以供其他微前端使用。

// webpack.config.js (productlist)
const { modulefederationplugin } = require('webpack').container;

module.exports = {
  plugins: [
    new modulefederationplugin({
      name: 'productlistapp',
      filename: 'remoteentry.js',
      exposes: {
        './productlist': './src/productlist',
      },
      shared: {
        react: { singleton: true, eager: true },
        'react-dom': { singleton: true, eager: true },
        // share any other libraries like a ui library, e.g., material-ui
      },
    }),
  ],
};
  • 微前端 2:购物车

公开 cart 组件,它使用共享状态库(如 zustand)进行购物车管理。

// webpack.config.js (cart)
const { modulefederationplugin } = require('webpack').container;

module.exports = {
  plugins: [
    new modulefederationplugin({
      name: 'cartapp',
      filename: 'remoteentry.js',
      exposes: {
        './cart': './src/cart',
      },
      shared: {
        react: { singleton: true, eager: true },
        'react-dom': { singleton: true, eager: true },
        zustand: { singleton: true }, // zustand or redux for shared state
      },
    }),
  ],
};

  • 微前端3:结账

使用 cart 和 productlist 组件以在结帐前显示摘要。

// webpack.config.js (checkout)
const { modulefederationplugin } = require('webpack').container;

module.exports = {
  plugins: [
    new modulefederationplugin({
      name: 'checkoutapp',
      remotes: {
        productlistapp: 'productlistapp@http://localhost:3001/remoteentry.js',
        cartapp: 'cartapp@http://localhost:3002/remoteentry.js',
      },
      shared: {
        react: { singleton: true, eager: true },
        'react-dom': { singleton: true, eager: true },
      },
    }),
  ],
};

组件实现:

  • 微前端1:产品列表

由 productlist 微前端公开。

新秀B2C商城系统
新秀B2C商城系统

新秀B2C商城系统是一款简洁易用PHP商城系统。可免费下载使用,可用于商业用途,没有时效限制,除版权标识外,所有代码都允许修改。后台功能简介:1、商城设置:基本信息,配送方式,配送范围,支付方式,财务管理;2、商品管理:商品列表,添加商品,商品分类,商品品牌,商品属性;3、订单管理:订单列表,缺货登记;4、用户互动:用户管理,留言管理,评论管理,网站公告,在线客服,用户协议;5、文章管理:文章列表

下载
// src/productlist.js (productlist)
import react from 'react';

const products = [
  { id: 1, name: 'product 1', price: 50 },
  { id: 2, name: 'product 2', price: 75 },
];

const productlist = () => (
  

products

    {products.map(product => (
  • {product.name} - ${product.price}
  • ))}
); export default productlist;
  • 微前端 2:购物车

由 cart 微前端公开并管理状态(例如,使用 zustand 或 redux)。

// src/cart.js (cart)
import react from 'react';
import create from 'zustand';

// zustand store for managing the cart
const usecartstore = create(set => ({
  cart: [],
  addtocart: (product) => set(state => ({ cart: [...state.cart, product] })),
  removefromcart: (product) =>
    set(state => ({ cart: state.cart.filter(item => item.id !== product.id) })),
}));

const cart = () => {
  const { cart, addtocart, removefromcart } = usecartstore();

  return (
    

cart

    {cart.map(product => (
  • {product.name} - ${product.price}
  • ))}
); }; export default cart;
  • 微前端3:结账

使用 cart 和 productlist 组件,将所有内容整合在一起。

// src/Checkout.js (Checkout)
import React, { lazy, Suspense } from 'react';

const ProductList = lazy(() => import('productListApp/ProductList'));
const Cart = lazy(() => import('cartApp/Cart'));

const Checkout = () => (
  

Checkout

Loading Products...
}> Loading Cart...
}>
); export default Checkout;

运行应用程序的步骤:

  • 运行微前端:

每个微前端(productlist、cart、checkout)将在不同的端口上提供服务(例如,productlist 在 localhost:3001 上,cart 在 localhost:3002 上,checkout 在 localhost:3003 上)。
您需要使用 webpack 开发服务器设置每个微前端并单独运行它们。

  • 使用远程模块:

在 checkout 微前端中,我们从各自的远程微前端动态导入 productlist 和 cart 组件。

  • 共享依赖项:

每个微前端共享 react、react-dom,以及可能的其他共享依赖项,例如状态库(例如 zustand)或设计系统(material-ui)。

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
DOM是什么意思
DOM是什么意思

dom的英文全称是documentobjectmodel,表示文件对象模型,是w3c组织推荐的处理可扩展置标语言的标准编程接口;dom是html文档的内存中对象表示,它提供了使用javascript与网页交互的方式。想了解更多的相关内容,可以阅读本专题下面的文章。

3371

2024.08.14

C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

14

2026.01.30

c++ 字符串格式化
c++ 字符串格式化

本专题整合了c++字符串格式化用法、输出技巧、实践等等内容,阅读专题下面的文章了解更多详细内容。

9

2026.01.30

java 字符串格式化
java 字符串格式化

本专题整合了java如何进行字符串格式化相关教程、使用解析、方法详解等等内容。阅读专题下面的文章了解更多详细教程。

12

2026.01.30

python 字符串格式化
python 字符串格式化

本专题整合了python字符串格式化教程、实践、方法、进阶等等相关内容,阅读专题下面的文章了解更多详细操作。

4

2026.01.30

java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

20

2026.01.29

java配置环境变量教程合集
java配置环境变量教程合集

本专题整合了java配置环境变量设置、步骤、安装jdk、避免冲突等等相关内容,阅读专题下面的文章了解更多详细操作。

18

2026.01.29

java成品学习网站推荐大全
java成品学习网站推荐大全

本专题整合了java成品网站、在线成品网站源码、源码入口等等相关内容,阅读专题下面的文章了解更多详细推荐内容。

19

2026.01.29

Java字符串处理使用教程合集
Java字符串处理使用教程合集

本专题整合了Java字符串截取、处理、使用、实战等等教程内容,阅读专题下面的文章了解详细操作教程。

3

2026.01.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

相关下载

更多

精品课程

更多
相关推荐
/
热门推荐
/
最新课程

最新文章

更多
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号