前言

opene edx 是开源的教育平台,在未来的开发计划中,open edx也在往前后端分离的方向进行。现在就来初探一下,edx前后端分离的思路 笔者从开始了解edx的studio-frontend前端仓库,到尝试构建,到成功搭建启动的过程,还是遇到了许多问题,有可能读者按官方的流程来走,可能会遇到挺多坑。

初探edx前后端分离

前提说明

笔者搭建的环境:Mac os 后端server: edx/devstack [h版本] Docker版本: Version 18.06.0-ce-mac70

安装搭建

假设devstack已搭建。如果没有搭建,请看devstack搭建教程

第一步: 克隆仓库代码 git clone [email protected]:edx/studio-frontend.git

第二步: cd studio-frontend 编辑 Dockerfile文件第六行 RUN npm i -g [email protected] RUN npm i -g npm@latest // 简单来说就是将npm的版本改为最新版本

第三步: make up

第四步: 等待启动完毕后,打开 http://localhost:18011/assets.html,点击 Log in,输入账号 [email protected] 密码 edx 登录系统后,回到 assets页面,即可看到如下页面

image.png | left | 747x373

至此,一个官方的studio-frontend 前端搭建起来

分析

__studio-frontend __前后端分离采用的技术是 webpack + react + redux + bootstrap + paragon __webpack__是前端工程流工具 reactparagonbootstrap 构建了高级的功能组件 redux 集中式对页面数据进行管理 该项目采取的是多页面多入口的打包方式,打包构建后的结果如下 ├── accessibilityPolicy.min.css
├── accessibilityPolicy.min.js
├── accessibilityPolicy.min.js.map
├── assets.min.css
├── assets.min.js
├── assets.min.js.map
├── common.min.css
├── common.min.js
├── common.min.js.map
├── courseHealthCheck.min.css
├── courseHealthCheck.min.js
├── courseHealthCheck.min.js.map
├── courseOutlineHealthCheck.min.css
├── courseOutlineHealthCheck.min.js
├── courseOutlineHealthCheck.min.js.map
├── editImageModal.min.css
├── editImageModal.min.js
├── editImageModal.min.js.map
├── i18n │ └── messages │ ├── ar.json │ ├── es_419.json │ ├── fr.json │ └── zh_CN.json ├── i18nMessages.min.js ├── i18nMessages.min.js.map ├── runtime.min.js └── runtime.min.js.map 最后将js.css文件嵌入在后端模版文件中,构成页面

image.png | left | 747x380

这样做其实还没有完全独立前后端分离,并且一些css可能会与原来系统中的css有冲突 官方表示在未来,理想中的前后端分离是前端代码完全静态托管在另一个server服务器中,该服务器通过REST(或GraphQL)API 与Studio通信

文件与目录

目录结构

image.png | left | 334x435

package.json包相关内容

image.png | left | 332x387

可以看到几个比较重要的包

  • @edx/edx-bootstrap
  • @edx/paragon
  • react、react-redux、redux-thunk
  • react-intl 在一篇介绍studio-frontend 前后端分离思路的文章中提及到 edx前后端分离采用的是react作为基础框架,在此基础上,进行前后端分离开发, paragon是官方的组件库,用来组合构建更高级的组件服务于edx平台,bootrstrap + Open edX 主题将为paragon设置样式内容。redux ,react-intl则是react生态圈中的一些插件,组合使用完成系统功能需求。

构建调试

官方的方式是构建出一个docker,在docker中配置好了环境,启动了项目,再将地址共享在主机中访问 API的请求则是采用了proxy代理的方式,代理转发到后端服务中 有特定的需求可以在webpack.dev.config中配置,例如接口地址的改变 笔者也尝试过,直接克隆项目代码。在项目下安装依赖包,然后开始构建调试前端代码,只不过需要对webpack proxy代理地址做一些调整

生产发布

指令很简单 npm run build 如果需要增加入口,则需在 webpack.common.config 的entry中相应增加 如果对生产发布的个性化调整,只需要对webpack进行相关配置即可

结语

这个只是笔者对open edx前后端分离思路的初步探索的一些总结,还有许多内容的值得去深挖。 将来如果对此有更深的理解和实践,再给大家进行分享 continue…