# Multi person online edit **Repository Path**: tree23/mpoe ## Basic Information - **Project Name**: Multi person online edit - **Description**: 使用Yjs、Quill、LuckySheet 等技术实现的markdown、txt、excel 等文件的多人在线协同编辑,支持以 websocket、webRTC、组合API等形式实现通信;后续会更新Word、ppt等多文件形式的协同,大家多多关注 Start~ - **Primary Language**: NodeJS - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 55 - **Created**: 2025-05-29 - **Last Updated**: 2025-05-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 多人协同编辑器项目说明 --- **如果大家仅想使用 excel 协同的话,建议看下 `luckysheet-crdt` 项目** ## 免责声明 本项目仅作为学习项目,仅供学习交流,目前还没达到应用生产的能力; markdown 协同中,Delta 数据结构存储仍采用 JSON.stringify 存储全量数据;canvas-editor 数据存储部分未开发; 项目为本人一人开发,在架构设计、代码可阅读性、可维护性上可能存在缺陷,功能上存在不完整部分;个人精力确实有限,望大家谅解;后续项目的维护会持续跟进 issues 问题,帮忙解决大家的疑惑。(也可加V:18276861941) 如果大家数据库导入失败,可以看看 [#IAKJJI: sql有外键依赖,可以按照这个顺序,原mysql中的顺序直接执行会有错误](https://gitee.com/wfeng0/mpoe/issues/IAKJJI) ## Luckysheet 协同 luckysheet 已实现全功能协同,包括图表、图片、sheet新建、删除、复制等,因其工作量较大,不在本项目中追加,为独立的项目,请移步: > [Luckysheet 协同增强版(全功能实现)](https://gitee.com/wfeng0/luckysheet-crdt) **整体效果** **图表协同** **图片协同** ## 项目目录结构

## 项目端口说明 ~~~javascript /** node/base.config.js*/ // 业务端口 const server_port = 5000; // ws 统一端口 const ws_port = 9000; /** Vue/default.config.js */ // ws 协同服务地址 export const ws_server_url = "ws://localhost:9000"; // node http 服务地址 export const http_server_url = "http://localhost:5000"; // socket.io 服务地址 export const socket_server_url = "http://localhost:5000"; 地址已经给大家封装好了,直接修改上面的地址即可。 ~~~ ## 项目启动方式**【必看】** > 1. *** 下列命令均是在项目根目录执行【根目录 D:\MPOE> MPOE结尾】 > > 2. *** 下列命令均是在项目根目录执行【根目录 D:\MPOE> MPOE结尾】 > > 3. *** 下列命令均是在项目根目录执行【根目录 D:\MPOE> MPOE结尾】 > > 4. node 版本说明:**本应用基于 node v14**,其他版本如若报错,可以自行搭建其他版本的应用 > > 5. 命令说明: > > 1. 执行的命令均是为大家封装好的,如果大家懂得原理,也可以自行操作 > > 6. 依赖下载方式: > > 1. npm run installVue :下载Vue相关依赖 > 2. npm run installNode :下载 node 相关依赖 > > 7. 启动方式: > > 1. 协同服务: > > ```javascript > 1. **推荐使用 Websocket 的协同方式** > 正常启动 node 即可支持 y-websocket 协同服务 > ``` > > 2. (方式一)npm run node > > 1. 上述方式启动的是Node服务器,地址为 [http://localhost:5000](http://localhost:5000) ,该方式**运行的是Vue打包后的dist文件** > > 3. (方式二)npm run dev > > 1. 上述启动的是vue的开发环境,也可以使用 > 2. 调试后,请重新打包放在 node服务上(打包的dist输出目录已经自动设置到node/public下) > > 4. 几个注意事项: > > 1. 请确保数据库服务正常开启,在Mysql文价夹下,有当前文件的数据库表说明文件:README.md 以及项目数据库文件 mysql.sql,如果对项目数据结构有疑问,请先查看相关数据结构说明文档哈 > > 2. 文件上传的路径问题,mvc -> controller -> file -> uploadFile 中有一个mv()方法,传入的是当前执行命令的根路径,如果在协同编辑中文件上传出现问题,可以看看这里; > > 3. node采用较强的模块化思想,每个单独的模块都会独立导出 index.js ,因此,node有很多的 index.js,注意区分; > > 4. 重新打包后(vue项目包、luckysheet二开包),luckysheet 文件的处理: > 5. 将luckysheet的dist放到node项目下,确保 index.html 引用正确的 luckysheet 即可。 > 6. socket.io 在服务端有一个跨域的配置,在 Node/socket/index.js 中,这是聊天用的,大家根据实际情况配置即可。 ```js const io = socketIO(http, { allowEIO3: true, cors: { origin: [ "http://localhost:3000", "http://127.0.0.1:3000", "http://localhost:3001", "http://127.0.0.1:3001", ], methods: ["GET", "POST"], credentials: true, }, }); ``` ## 打包后文件处理 ```javascript 1. 打包命令 npm run build 2. 生成 dist 目录,将自动放置到 node/public 下 3. 检查并调整script引用地址为node结构下的luckysheet地址 4. 打包后,public 下的libs目录会一起打包到 dist 中,luckysheet 如果没有复制到node中,则引的是当前目录下的 libs 即可 ``` ## 项目地址 gitee: [https://gitee.com/wfeng0/mpoe](https://gitee.com/wfeng0/mpoe) ## 文章地址 yjs+quill协同: [https://blog.csdn.net/weixin_47746452/article/details/132402713?spm=1001.2014.3001.5501](https://blog.csdn.net/weixin_47746452/article/details/132402713?spm=1001.2014.3001.5501) luckysheet协同:[https://blog.csdn.net/weixin_47746452/article/details/134240905?spm=1001.2014.3001.5501](https://blog.csdn.net/weixin_47746452/article/details/134240905?spm=1001.2014.3001.5501) 掘金:[https://juejin.cn/post/7298170736480485376](https://juejin.cn/post/7298170736480485376) ## B站视频 B站:[https://www.bilibili.com/video/BV1Sj41117v4/?spm_id_from=333.999.0.0&vd_source=604a25c77e296b4ce29b1e6e6cf03ea6](https://www.bilibili.com/video/BV1Sj41117v4/?spm_id_from=333.999.0.0&vd_source=604a25c77e296b4ce29b1e6e6cf03ea6)