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
podium micro-frontends 简单试用的更多相关文章
- Micro Frontends
Micro Frontends - extending the microservice idea to frontend development https://micro-frontends.or ...
- Micro Frontends 微前端
Micro Frontends https://martinfowler.com/articles/micro-frontends.html Integration approaches Server ...
- Micro Frontends & microservices
Micro Frontends & microservices https://micro-frontends.org/ https://github.com/neuland/micro-fr ...
- jQuery无刷新上传之uploadify简单试用
先简单的侃两句:貌似已经有两个月的时间没有写过文章了,不过仍会像以前那样每天至少有一至两个小时是泡在园子里看各位大神的文章.前些天在研究“ajax无刷新上传”方面的一些插件,用SWFUpload实现了 ...
- Micro:Bit手柄试用之一MagicPad (解决蓝牙与gamePad包共存)
前言 原创文章,转载引用务必注明链接.由于本人初次接触Micro:Bit,水平有限,如有疏漏,欢迎指正. Micro:Bit真好玩! DFRobot的论坛相关资料算是国内比较丰富的了,个人感觉MB比A ...
- cloudevents js sdk 简单试用
cloudevents 目前官方提供了不同语言的sdk,以下是js 的简单学习试用,从目前来说更新不是很好 clone 代码 git clone https://github.com/cloudeve ...
- Visual Studio Code 的简单试用体验
首先对Visual Studio Code做一个大概的介绍.首先明确一下,这个Visual Studio Code(以下简称 vscode)是一个带GUI的代码编辑器,也就是只能完成简单的代码编辑功能 ...
- Cassandra安装及其简单试用
官方主页:http://cassandra.apache.org/ 简介: The Apache Cassandra Project develops a highly scalable second ...
- nginx ngx_http_image_filter_module 简单试用
nginx包含了一个ngx_http_image_filter_module 模块,我们可以方便的进行图片的缩略图,平时一些简单的功能 已经够用了 环境准备 为了简单使用docker-compose ...
随机推荐
- lnmp1.4安装包
https://lnmp.org/install.html nginx中虚拟机中的配置 location ~ .*\.(php|php5)?$ { try_files $uri =404; fastc ...
- GIT VI操作汇总
在Git Bash Here中用命令行 pull\push\merge 代码,如果存在冲突或者自动合并时,会自动进入VI界面 1.按下 ESC 键,退出编辑模式,切换到命令模式. 2.输入 :wq , ...
- 调用日志输出错误:TypeError: 'int' object is not callable等
*)TypeError: 'int' object is not callable 错误信息: Traceback (most recent call last): File "Visual ...
- python基础2--if,while,for,逻辑运算
1.1 条件控制语句 1.if - elif - else 2.常用操作运算符 < > >= <= == != 3.if elif 后面一定要有条件 else后面没有条件 1 ...
- 浏览网页隐藏服务器IP
host文件修改 notepad %windir%\system32\drivers\etc\hosts 目标IP localhost.autumn.com 可能会导致HTTP Status Code ...
- Vue学习之监听methods、watch及computed比较小结(十一)
一.三者之间的对比: 1.methods方法表示一个具体的操作,主要书写业务逻辑: 2.watch:一个对象,键是需要观察的表达式,值是对应回调函数.主要用来监听某些特定数据的变化,从而进行某些具体业 ...
- Java 之 HashSet 集合
一.概述 java.util.HashSet 是 Set 接口的一个实现类,它所存储的元素是不可重复的,并且元素都是无序的(即存取顺序不一致). java.util.HashSet 底层的实现是一个 ...
- ES6 对象解构赋值(浅拷贝 VS 深拷贝)
对象的扩展运算符(...)用于取出参数对象的所有可遍历属性,拷贝到当前对象之中. 拷贝对象 let aa = { age: 18, name: 'aaa' } let bb = {...aa}; co ...
- Kubernetes学习之原理
Kubernetes基本概念 一.Label selector在kubernetes中的应用场景 1.kube-controller-manager的replicaSet通过定义的label 来筛选要 ...
- 自制微擎AI面相识别算术阈值
有时在朋友圈或其他地方会看到一些AI面相的分享链接或小程序,不是面相算命的有多吸引人,而是前面有"AI"两个字母.于是我就上网找了一下相关代码,发现了一个微擎系统的面相模块.下载下 ...