Build web and develop
目前 Conduit 并非采用完全的前后端分离方案,首先是基于 Go 编译 HTML 模版,并启动一个 Go server,再通过HTML模版加载编译打包后的 JS bundle 文件。 这部分是关于如何用本地开发模式启动 Dashboard 的 Web 及前端部分。
web部分结构
项目目录
|__ /web dashboard web
|__ /app 前端静态资源
|__ /css css
|__ /fonts 字体
|__ /img 图片
|__ /js js
|__ /componenets react 组件目录
|__ index.js react 入口
|__ test 测试文件
|__ .babelrc babel 配置
|__ .eslint eslint 配置
|__ karma.conf.js karma 配置
|__ package.json package 配置
|__ postcss.config.js postcss 配置
|__ webpack.config.js webpack 配置
|__ /srv dashboard web go server 相关实现
|__ /templates dashboard html template
|__ /util go 相关 util
|__ Dockerfile docker 配置
|__ main.go go server web 入口
|__ readme.md
前置准备:启动 API 等相关 Controller
若未启动该部分,则 Go 服务器在启动时需要编译的一些与 conduit 版本等相关的数据会获取不到,导致模版 html 编译不过,并且前端代码无法完整运行。
具体 API 等相关构建参考 build-control-panel 部分。
前端开发相关
安装依赖
cd app # 进入 app 目录
yarn # 安装依赖
hot reload 启动前端任务编译功能
webpack-dev-server 会自动更新前端代码并输出到 dist 文件夹内,具体内容可以查看 webpack.config.js
yarn webpack-dev-server
启动 web server
cd .. # 返回到web根目录
go run main.go -webpack-dev-server=http://localhost:8080
利用 Go 启动 web 服务器,编译 html 模板,并把命令参数中的 -webpack-dev-server 作为静态资源地址写入到编译后的html内。
若未启动 API 服务,此时 HTML 的编译并不能成功。会看到有包含如下文字的报错信息。这是由于 API 相关服务未启动,导致的编译问题。
template: app.tmpl.html:2:59: executing "content" at <.Data.ReleaseVersion>: can't evaluate field ReleaseVersion in type *conduit_public.VersionInfo
若未启动 API 服务导致编译失败,具体细节是默认的 api-addr 参数只有端口,这在以容器方式启动的时候 OK 的,但是本地运行时,因为只有端口,Go 服务器启动后会按照默认参数配置,直接请求一个不存在的地址http://:8085。
若按照 build-control-panel 的方式启动了 API 等服务,则执行如下命令即可:
go run main.go -addr=:8084 -metrics-addr=:9994 -api-addr=localhost:8085 -webpack-dev-server=http://localhost:8080 -uuid=96e84670-0a7c-4c08-8c13-2c2d988f992e
启动前端单元测试
conduit 使用karma + mocha + sinon + jsdom,具体内容可以查看karma.config.js
yarn karma start