ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Polymarket Copy Trading Bot 目录结构详解:server、client、shared 三大模块到底各管什么?

Polymarket Copy Trading Bot 目录结构详解:server、client、shared 三大模块到底各管什么?

【免费下载链接】polymarket-copy-trading-bot

A constantly evolving and thoughtful architecture for creating static blogs.

项目地址:https://gitcode.com/gh_mirrors/ev/polymarket-copy-trading-bot
点击查看免费下载

🤔 看到polymarket-copy-trading-bot仓库里并排的server、client、shared三个目录,是不是有点懵?别急,这篇文章用最直白的方式带你拆解这套Play Framework + Scala.js工程的目录结构:每个模块负责什么、有哪些关键文件、三者又如何协同工作。读完你会发现,所谓"目录结构详解"其实就是一条清晰的前后端分离 + 共享代码思路。

上图:在 Eclipse 中导入项目时,可以同时看到client、server、shared/.jvm三个子工程——这正是本仓库三大模块的直观体现

一分钟看懂仓库总览

先说结论:这个仓库本质上是一个Giter8 模板(可用模板快速生成项目),根目录下的 project/plugins.sbt 声明了构建所需的 sbt 插件,而真正要看的模板源码都放在src/main/g8/里,核心就是那三大模块:

模块位置一句话职责
serversrc/main/g8/server/Play 服务端:路由、控制器、视图模板、静态资源
clientsrc/main/g8/client/Scala.js 客户端:跑在浏览器里的前端逻辑
sharedsrc/main/g8/shared/服务端与客户端都可引用的共享 Scala 代码

项目说明详见根目录的 README.md。

server 模块:负责"后端的一切"

server是一个标准的Play Framework应用,处理 HTTP 请求、渲染页面、管理配置。打开 src/main/g8/server/ 可以看到典型结构:

  • 控制器:controllers/Application.scala 定义了首页接口,把消息渲染进页面;
  • 视图模板:views/index.scala.html 和 views/main.scala.html 是 Twirl 模板,负责生成 HTML;
  • 路由配置:conf/routes 把 URL 映射到控制器,例如GET /对应首页;
  • 应用配置:conf/application.conf 存默认配置,conf/heroku.conf 用于 Heroku 部署场景;
  • 静态资源:public/下是样式表 main.css 等浏览器直接引用的文件。

💡 简单记忆:凡是"收到请求 → 返回页面/数据"的活,都归server管。

client 模块:跑在浏览器里的 Scala.js 前端

client是基于Scala.js编写的前端工程,源码最终会被编译成 JavaScript 在浏览器中执行。它的入口只有一个示例文件:

  • ScalaJSExample.scala:程序启动后找到页面里的scalajsShoutOut元素,并把一条消息写进文本内容。

它的关键点在于依赖了 shared 模块——文件中 import 了$package$.shared.SharedMessages,这就是三大模块联动的第一条线索:前端不是凭空说话,而是引用共享代码里的内容。

shared 模块:让前后端"说同一种语言"

shared专门存放服务端和客户端都要用到的 Scala 代码,避免同一份逻辑在两处维护。模板中只放了一个演示类:

  • SharedMessages.scala:提供itWorks方法,返回"It works!"这条消息。

这条消息的去向很有代表性:

  1. server的控制器把它渲染到首页视图;
  2. client的 Scala.js 代码把它写进页面元素。

同一份文案、两处展示,靠的就是shared这个"公共零件库"。

三大模块如何协同工作?

整体协作链路可以概括为:

shared定义共享逻辑 →server构建页面并引用共享代码 →client编译成 JS 后在浏览器里继续引用共享代码

构建层面还有几个值得知道的事实(均来自 README.md 的说明):

  • 根项目聚合一切:root工程聚合了其余所有子项目,执行clean时可一次性清理全部生成文件;
  • 编译即链接:执行compile会触发 Scala.js 的fastLinkJS任务,run则在页面刷新时自动重新链接前端代码;
  • 打包优化:发布时把scalaJSStage设为FullOptStage,即可执行更彻底的fullLinkJS优化;
  • 部署入口:Procfile 指定了启动命令,直接运行server生成的可执行程序。

常见问题(FAQ)

Q:为什么 shared 会出现.jvm这样的子目录?A:shared使用了跨平台工程(crossproject)方式构建,shared/.jvm是它的 JVM 端产物,浏览器端则由 Scala.js 编译器处理,这也是截图中能看到shared/.jvm的原因。

Q:我只改前端,需要动 server 吗?A:不一定。纯前端改动只涉及client;但如果改的内容前后端都要用,就应该把逻辑放进shared,再让两边各自引用。

Q:IDE 里应该怎么打开?A:IntelliJ 选择 "Import Project from SBT" 导入根目录即可;Eclipse 则需先执行sbt "eclipse with-source=true"再导入,并只勾选 client、server 和 shared/.jvm,参考 README.md 的 IDE integration 一节。

总结

用一句话收束这篇Polymarket Copy Trading Bot 目录结构详解:

  • 🖥️server:Play 后端,管请求、路由与页面渲染
  • 🌐client:Scala.js 前端,管浏览器里的交互逻辑
  • 🔗shared:共享代码库,让前后端复用同一份逻辑

理解了这个"三件套"分工,再看任何 Play + Scala.js 混合工程都不会迷路了。✨

【免费下载链接】polymarket-copy-trading-bot

A constantly evolving and thoughtful architecture for creating static blogs.

项目地址:https://gitcode.com/gh_mirrors/ev/polymarket-copy-trading-bot
点击查看免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进