当前位置:网站首页>FE主导打造一个运营活动平台
FE主导打造一个运营活动平台
2022-08-03 11:31:00 【sunilwang】
背景
当今互联网公司,一般都会有一些运营类活动,如公司活动宣传
、节假日优惠促销
等,在电商类公司更是需要频繁的上(下)线运营活动。
在这里要说明一下,本文讲的并
非类
似易企秀这样的制作“手机幻灯片、H5场景应用”的运营平台,而是一些常规运营活动。当然如果要做幻灯片滑屏效果,也可以开发一个“幻灯片组件”。
那么,如何上线一个运营活动呢?传统
流程如下:
需求收集 专题制作:页面切图、效果实现、接口开发 QA测试 上线 活动结束,手动下线
传统开发方式存在以下几个缺点
:
周期长,从往往每个运营活动都做为一个独立的Mini项目进行 开发人员大量重复劳动,无法(不便)复用一些之前运营活动中开发过的功能,比如设置分享、与App的交互等 运营活动投放过程中,修改不便,如bug fix、 修改文案
,正规公司也需要一个完整的上线流程
为解决这些问题,很多公司都推出了自己的运营活动平台。比如淘宝早期的eCRM-图腾
,到目前的统一营销平台UMP
、蚂蚁金服的闪蝶
(闪蝶更像易企秀)、京东的通天塔
等,都是非常优秀的平台工具。
那么,如何开发一款精美轻巧的运营活动平台呢?本文为大家提供一种新思路:利用组件化的方式开发一个运营活动平台
平台架构图

平台架构说明
mongonDB提供数据存储;Node.js提供平台接口、文件处理等服务;PM2用来管理项目;组件脚手架,为参与组件开发(自定义组件)的同学提供一个快速开始的工具,避免复制粘贴;组件库,构成运营活动页面的骨架;平台,由平台基础功能(页面配置)和N个组件(包括组件的数据项)构成;最终生成一个运营活动页面;
平台操作流程

平台依赖的“技术栈”
React
-前端JavaScript库Redux
-状态管理,在所见即所得(实时输入=>输出)的专题预览发挥最大作用Redux Form
-表单数据管理,并负责后台复杂逻辑展示,以及表单配置项的数据联动webpack
-项目构建工具Node.js
-服务端功能支撑,提供后台数据接口MongoDB
-数据存储如果需要动态接口(平台不能提供)支持,放到组件预览的实现部分即可;
开发一个平台组件
一个组件就是一个完整的NPM包,基于此,任何FE同学都可以独立开发一款自定义组件,只需要发布到私有NPM(当然也可以托管到github等公网平台)即可。
除了NPM所必须的package.json、用于组件开发的webpack/postcss.config.js/.eslint/.npmignore
配置等文件之外,通常一个组件通常由以下几部分组成:
config.json-组件默认配置,用于组件初始化数据,包含 类型
、名称
、分组(tag)
、开发者信息
、默认样式
、支持终端类型
等;thumb.jpg-示意图,用于用户选择添加组件时的组件预览; src/components/ConfigForm.jsx-组件表单配置; src/components/Preview.jsx-根据ConfigForm的数据配置、 动态接口拉取数据
,实时预览组件的呈现(见下方效果图,该图片组件中,用到了RD提供的图片上传接口);src/dev.jsx、src/preview.jsx、src/config.jsx-本地开发组件时的入口(webpack中的entry),根据dev/production判断入口文件是dev还是preview/config;如果是生产环境,会生成 dist/preview.js
和dist/config.js
两个文件,在运营平台下添加组件时,会读取组件打包的这两个文件;src/dev.scss、src/main.scss-开发环境的样式和组件的样式,打包后,会生成 dist/config.css
和dist/preview.css
实现效果

webpack配置注意事项
output中要指定 umdNamedDefine
为'true',否则打包出来的文件在平台中import时会报错生产环境下,要指定 externals
,将react
、react-dom
、redux-form
、react-redux
等依赖包排除,以减小和优化打包文件体积css-loader中,开启modules模块,并将 process.env.npm_package_name
加入localIdentName
配置中,如此打包出来的css文件中的class名称包含了组件名(而组件是不可以重名的,否则也无法publish到相同npm平台上),结合hash:base64:10
,为css的class名称避免重复提供更多保障;
在运营平台项目中管理组件
运营平台需要为有权限的用户提供组件管理的功能,包括新增
、升级
、禁用
组件,新增组件时,根据组件的唯一标识package_name
来判断组件是否存在。另外,如果是发布到私有npm平台,可能需要判断组件名称是否合法:私有npm包名往往会以@xxx/开头,用于区分私有npm包和公共npm包。
升级组件
-原有组件如果进行了版本升级(在私有npm中发了新的版本),需要在平台组件管理
中进行组件手动升级。
组件升级带来的好处:假设新版本组件中存在bug,未采用新组件的线上运营活动不会受到影响。但也有个弊端:假设旧版本组件有bug,修复后,线上引用了有bug版本的运营活动需要手动发布。所以,平台需要提供根据引用组件检索的能力,且最好提供批量发布
的功能;
平台中动态引入组件
在一个运营活动中加入一个组件时,如何动态引入已有组件呢?以配置文件JS为例,

注:convertName是对组件名字的处理
结束语
最近,中台
的概念吵的比较热。笔者以为,中台存在的最重要意义就是降本提效
。以组件
开发的形式,开发运营活动平台,可以由FE主导,节省很大开发成本,符合降本提奖
的初衷。大家如果有更好的开发思路,欢迎留言交流。
作者简介
武明礼:58本地服务FE负责人。
边栏推荐
- 智能日报脚本
- 基于PHP7.2+MySQL5.7的回收租凭系统
- Dva.js 新手入门指南
- 【一起学Rust 基础篇】Rust基础——变量和数据类型
- Why is the new earth blurred, in-depth analysis of white balls, viewing pictures, and downloading problems
- 【二分查找详解外加递归写法】附有全部代码
- 图新地球为什么很模糊,白球、看图、下载问题深度剖析
- Cross-chain bridge protocol Nomad suffers hacker attack, losing more than $150 million
- [Detailed explanation of binary search plus recursive writing method] with all the code
- For invoice processing DocuWare, cast off the yoke of the paper and data input, automatic processing all the invoice received
猜你喜欢
笔试题:金额拆分
Activiti产生的背景和作用
LeetCode 899 Ordered queue [lexicographical order] HERODING's LeetCode road
【MySQL功法】第5话 · SQL单表查询
【一起学Rust】Rust学习前准备——注释和格式化输出
基于SSM和Web实现的农作物生长监控系统
【MySQL功法】第4话 · 和kiko一起探索MySQL中的运算符
【LeetCode—第2题 两数之和 代码详解 】附有源码,可直接复制
The way of programmer architecture practice: how to design a sustainable evolution system architecture?
后台图库上传功能
随机推荐
[Bubble sort and odd-even sorting]
零拷贝、MMAP、堆外内存,傻傻搞不明白...
LeetCode——622.设计循环队列
RICON:NER SOTA 又来!
图新地球为什么很模糊,白球、看图、下载问题深度剖析
Skills required to be a good architect: How to draw a system architecture that everyone will love?What's the secret?Come and open this article to see it!...
asdn涨薪技术之apifox+Jenkins如何玩转接口自动化测试
LeetCode-1161. 最大层内元素和
Objective - C code analysis of the deep and shallow copy
机器比人更需要通证
Simple implementation of a high-performance clone of Redis using .NET (1)
thymeleaf中的日期格式转化
实至名归!九章云极DataCanvas公司荣获智能制造领域多项殊荣
Cookie and Session usage
缓存--伪共享问题
dataset数据集有哪些_数据集类型
试题G:单词分析 ← 第十一届蓝桥杯大赛第二场省赛赛题
VRRP协议的作用及VRRP+OSPF配置方法
【TypeScript】Why choose TypeScript?
viewstub 的详细用法_pageinfo用法