以下是一个简单的podium 试用,包含了layout 以及podlets,使用docker 运行
podium 主要包含了两大部分

  • podlets
    片段服务
  • layouts
    片段组合服务

环境准备

  • docker-compose 文件
 
version: '3'
services:
  layout:
     build:
       context: layouts/home
       dockerfile: Dockerfile
     ports:
     - "7000:7000"
  layout-index:
     build:
       context: podlets/indexpage
       dockerfile: Dockerfile
     ports:
     - "7100:7100"
  layout-userlogin:
     build:
       context: podlets/userlogin
       dockerfile: Dockerfile
     ports:
     - "7101:7101"

服务编写

  • podlets/indexpage
    package.json
{
  "name": "indexpage",
  "version": "1.0.0",
  "main": "index.js",
  "license": "MIT",
  "dependencies": {
    "@podium/podlet": "^4.2.0",
    "express": "^4.17.1"
  },
  "scripts": {
    "app":"node index"
  }
}
 

index.js

const express = require("express")
const Podlet = require("@podium/podlet")
const app = express();
const podlet = new Podlet({
    name: 'index', // required
    version: '1.0.0', // required
    pathname: '/', // required
    manifest: '/manifest.json', // optional, defaults to '/manifest.json'
    content: '/', // optional, defaults to '/'
    development: true, // optional, defaults to false
});
app.use(podlet.middleware());
app.get(podlet.content(), (req, res) => {
    res.status(200).podiumSend(`
        <div>
            This is the index podlet's HTML content
        </div>
    `);
});
app.get(podlet.manifest(), (req, res) => {
    res.status(200).send(podlet);
});
app.listen(7100);
 
 

Dockerfile

FROM node:alpine
LABEL AUTHOR="1141591465@qq.com"
WORKDIR /app
COPY . /app
RUN yarn
EXPOSE 7100
RUN yarn
CMD [ "yarn", "app"]
 
 
  • podlets/userlogin
    package.json
 
{
  "dependencies": {
    "@podium/podlet": "^4.2.0",
    "express": "^4.17.1"
  },
  "name": "userlogin",
  "version": "1.0.0",
  "main": "index.js",
  "license": "MIT",
  "scripts": {
    "app":"node index"
  }
}
 
 

index.js

const express = require("express")
const Podlet = require("@podium/podlet")
const app = express();
const podlet = new Podlet({
    name: 'userlogin', // required
    version: '1.0.0', // required
    pathname: '/userlogin', // required
    manifest: '/manifest.json', // optional, defaults to '/manifest.json'
    development: true, // optional, defaults to false
});
app.use(podlet.middleware());
app.get(podlet.content(), (req, res) => {
    res.status(200).podiumSend(`
        <div>
            This is the userlogin podlet's HTML content
        </div>
    `);
});
app.get(podlet.manifest(), (req, res) => {
    res.status(200).send(podlet);
});
app.listen(7101);
 
 

Dockerfile

FROM node:alpine
LABEL AUTHOR="1141591465@qq.com"
WORKDIR /app
COPY . /app
RUN yarn
EXPOSE 7101
RUN yarn
CMD [ "yarn", "app"]
  • layouts/home
    package.json
 
{
  "name": "home",
  "version": "1.0.0",
  "main": "index.js",
  "license": "MIT",
  "dependencies": {
    "@podium/layout": "^4.2.0",
    "express": "^4.17.1"
  },
  "scripts": {
    "app":"node index"
  }
}
 
 

index.js

const express = require('express');
const Layout = require('@podium/layout');
const app = express();
const layout = new Layout({
    name: 'dashboard', // required
    pathname: '/', // required
});
const index = layout.client.register({
    name: 'index', // required
    uri: 'http://layout-index:7100/manifest.json', // required
});
const userlogin = layout.client.register({
    name: 'userlogin', // required
    uri: 'http://layout-userlogin:7101/manifest.json', // required
});
app.use(layout.middleware());
app.get('/', async (req, res,next) => {
    const incoming = res.locals.podium;
    const [a,b] = await Promise.all([
        index.fetch(incoming),
        userlogin.fetch(incoming),
    ]);
    incoming.view.title = 'My Super Page';
    res.podiumSend(`
    <section>${a.content}</section>
    <section>${b.content}</section>
`);
});
app.listen(7000);
 

Dockerfile

FROM node:alpine
LABEL AUTHOR="1141591465@qq.com"
WORKDIR /app
COPY . /app
RUN yarn
EXPOSE 7000
RUN yarn
CMD [ "yarn", "app"]

构建&&启动

  • 构建镜像
docker-compose  build
  • 启动
docker-compose up -d
  • 效果

打开 http://localhodt:7000

说明

podlets 提供片段服务,layout 提供webpage 的组合服务,使用上还是比较简单的,同时里边也包含了版本的处理(通过元数据服务)

参考资料

https://podium-lib.io/docs/podium/conceptual_overview
https://github.com/rongfengliang/podium-docker-compose

podium micro-frontends 简单试用的更多相关文章

  1. Micro Frontends

    Micro Frontends - extending the microservice idea to frontend development https://micro-frontends.or ...

  2. Micro Frontends 微前端

    Micro Frontends https://martinfowler.com/articles/micro-frontends.html Integration approaches Server ...

  3. Micro Frontends & microservices

    Micro Frontends & microservices https://micro-frontends.org/ https://github.com/neuland/micro-fr ...

  4. jQuery无刷新上传之uploadify简单试用

    先简单的侃两句:貌似已经有两个月的时间没有写过文章了,不过仍会像以前那样每天至少有一至两个小时是泡在园子里看各位大神的文章.前些天在研究“ajax无刷新上传”方面的一些插件,用SWFUpload实现了 ...

  5. Micro:Bit手柄试用之一MagicPad (解决蓝牙与gamePad包共存)

    前言 原创文章,转载引用务必注明链接.由于本人初次接触Micro:Bit,水平有限,如有疏漏,欢迎指正. Micro:Bit真好玩! DFRobot的论坛相关资料算是国内比较丰富的了,个人感觉MB比A ...

  6. cloudevents js sdk 简单试用

    cloudevents 目前官方提供了不同语言的sdk,以下是js 的简单学习试用,从目前来说更新不是很好 clone 代码 git clone https://github.com/cloudeve ...

  7. Visual Studio Code 的简单试用体验

    首先对Visual Studio Code做一个大概的介绍.首先明确一下,这个Visual Studio Code(以下简称 vscode)是一个带GUI的代码编辑器,也就是只能完成简单的代码编辑功能 ...

  8. Cassandra安装及其简单试用

    官方主页:http://cassandra.apache.org/ 简介: The Apache Cassandra Project develops a highly scalable second ...

  9. nginx ngx_http_image_filter_module 简单试用

    nginx包含了一个ngx_http_image_filter_module 模块,我们可以方便的进行图片的缩略图,平时一些简单的功能 已经够用了 环境准备 为了简单使用docker-compose ...

随机推荐

  1. Elasticsearch常见用法-入门

    前台启动 默认是只有本地可以访问 ./bin/elasticsearch 远程访问 修改elasticsearch.yml,把network.host(注意配置文件格式不是以 # 开头的要空一格, : ...

  2. GitLab CI/CD的官译【原】

    CI / CD方法简介 软件开发的持续集成基于自动执行脚本,以最大限度地减少在开发应用程序时引入错误的可能性.从新代码的开发到部署,它们需要较少的人为干预甚至根本不需要干预. 它涉及在每次小迭代中不断 ...

  3. Visual Studio的语法着色终于调得赏心悦目

    代码可读性瞬间大大提升.Reshaper真的强大.

  4. 详细的Hadoop的入门教程-单机模式 Standalone Operation

    一. 单机模式Standalone Operation 单机模式也叫本地模式,只适用于本地的开发调试,或快速安装体验hadoop,本地模式的安装比较简单,下载完hadoop安装包就可以直接运行. 1. ...

  5. python基础流程控制

    流程控制主要分为三大类: 1.if 判断语句 2.while 循坏语句 3.for 循坏语句 下面以举例说明: if 判断语句: user1 = 'seven' user2 = 'alex' pass ...

  6. drf--频率组件

    目录 频率组件简介 自定义频率类 内置频率类及局部使用 全局使用 源码分析 SimpleRateThrottle源码分析 频率组件简介 主要是为了限制用户访问的次数,比如某一个接口(发送验证码)同一个 ...

  7. comet oj #7

    A 签到题 题目描述 多次询问,每次询问给一个值域范围 [l,r][l,r],要回答下列四个问题: 从这个范围内选出两个整数(两个数可相同), (1) 这两个数的最小公倍数最大是多少? (2) 这两个 ...

  8. [转发] SAP EPIC 银企直连+TRM资金管理

    事务代码:EPIC_PROC 电子支付集成 收款; 付款; 付款审批; 银行回单(下载,创建,修改,辩识,认领); 查询账户余额; 查询交易明细; BADI增强; VA虚拟账户客户回单自动辨识; .. ...

  9. HTML列表简单介绍

    1.无序列表 使用标签:<ul>,<li> 属性:disc,circle,square 2.有序列表 使用标签:<ol>,<li> 属性:A,a,I,i ...

  10. Linux命令:scp

    1.find命令: scp [参数] [原路径] [目标路径] 2.用法: scp是 secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令.linux的sc ...