podium micro-frontends 简单试用
以下是一个简单的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
- 效果
说明
podlets 提供片段服务,layout 提供webpage 的组合服务,使用上还是比较简单的,同时里边也包含了版本的处理(通过元数据服务)
参考资料
https://podium-lib.io/docs/podium/conceptual_overview
https://github.com/rongfengliang/podium-docker-compose
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2018-08-26 pipelinedb 滑动窗口
2018-08-26 pipelinedb Continuous transforms 操作
2018-08-26 pipelinedb continuous view 操作
2018-08-26 hasura graphql 集成pipelinedb测试
2018-08-26 prisma 集成 pipelinedb测试
2014-08-26 在.NET中实现Actor模型的不同方式
2014-08-26 .NET4.0框架退休日期逐渐临近