基于 Astro 框架,UI 组件使用 React 开发,打包输出结果为 Node.js 服务器。
- Astro 框架允许混用 React、Vue、Svelte 等 UI 框架,目前仅使用 React,当然还有 Astro 自带格式的组件(
.astro模板文件)。 - 由于本项使用 CMS,内容是动态的,考虑到 SEO,所以需要 SSR,故打包输出结果设置为 Node.js 服务器。
- 在项目根目录创建
.env文件,内容为:
SANITY_PROJECT_ID=[Sanity 项目 ID]
SANITY_DATASET=[Sanity 数据集名称]
ADMIN_TOTP_KEY=[登录管理页面所用一次性密码的生成密钥]关于 Sanity
fly-dbh.com 使用 Sanity 作为 CMS。
Sanity 是一个开源的 CMS 项目,包含数据库逻辑和前端管理页面,同时,Sanity 项目背后的其运营方,也为小型项目提供免费的内容托管服务。
上述所需的 PROJECT_ID 和 DATASET 就是 Sanity 托管服务的项目标识。
运行该代码库需要这些标识信息,而我自然不会公开 fly-dbh.com 所用的 Sanity 项目 ID。 关于 fly-dbh.com 所用的 Sanity 项目结构,是开源公开的,可见 这一代码库。
各位如果想在本地运行该项目,可以使用上述 Sanity 结构开设一个 Sanity 项目,并使用开设的项目的 ID。
- 运行命令
# 安装 NPM 依赖包
> npm install
# 选择命令
> npm start关于上线流程
可直接通过 npm start 命令触发上线流程。
线上版本使用 Docker 镜像部署发布,打包流程是在 Docker 容器内完成的。
- 代码库根目录下的各
Dockerfile文件为对应的 Docker 镜像生成文件,供各环境使用。- 不带后缀的文件,对应生产环境使用。
- 如果要更改生产环境发布流程,只需修改对应的
Dockerfile。
展开
该目录下的 .astro 文件,会自动地根据目录结构,生成网站路由结构,如:
@/pages/index.astro对应首页/@/pages/sale.astro对应二级页面/sale@/pages/support/index.astro对应二级页面/support
所有的页面,以及暴露的接口请求(Astro 称其为 endpoint)均放在 @/pages 目录下。
除非 该目录或文件的名称称以 _ 为开头,这些目录和文件不会生成路由结构。
因此,如果需要在 @/pages/ 下存放模板或者素材,请以 _ 为开头命名,如:
@/pages/home/_components/footer.tsx@/pages/videos/_assets/youtube.svg
另外,@/pages 下的第一级目录,如果名称和语言 ID 相同,则会被视为该语种的特殊模板目录。
- 当前所有语言会使用相同的模板文件,如访问日文版
/ja/cases时,也会使用@/pages/cases/index.astro作为模板文件。 - 如果存在
@/pages/ja/cases/index.astro文件,访问这一 URL 时则会使用该文件作为模板文件,以此可以完全区分不同语言的渲染结果。
有关 Astro 的页面和路由的详细规则,请见官方开发文档。
展开
在 Astro 框架下,React 组件之间没有联系,是不属于同一个根组件的,故使用 Context 之类的方案共享 State 这样的方式行不通。
根据 Astro 官方的建议,如果有这样的需求,可采用 nanostores 来开发。可查阅 参考文档。
本代码库已安装有 nanostores。