跳至主要內容

初始化项目

njrProjectinit projectkitchen大约 2 分钟约 627 字

技术方案选型

Flutter vs React Native

目前,Flutteropen in new windowReact Nativeopen in new window 是最流行的跨端解决方案。

考虑到 Flutter 使用 dart 语言,而 React Native 使用 js,学习成本相对而言较少,因此决定使用 React Native。

Expo Go vs React Native CLI

如果您是移动开发的新手,最简单的入门方法就是使用 Expo Go。Expo 是一套围绕 React Native 构建的工具和服务,虽然它有很多功能,但目前与我们最相关的功能是它能让你在几分钟内编写出一个 React Native 应用程序。您只需要一个最新版本的 Node.js 和一部手机或模拟器。

如果你已经熟悉移动开发,你可能想使用 React Native CLI。它需要 Xcode 或 Android Studio 才能开始使用。如果你已经安装了这些工具之一,应该可以在几分钟内开始运行。如果没有安装这些工具,则需要花费大约一个小时进行安装和配置。

考虑到快速实现一个 MVP,最终选择了 Expo。

Next or Node

最初,考虑使用 Expo 与 Next.js 结合的方案来实现前后端不分离的全栈项目。然而,Expo 官方open in new window 提到 Next.js 只能用于 Expo for Web,无法实现跨端需求。

因此确定使用 Expo + Node.js + Monorepo 的方案,这样可以使得项目结构更加清晰,便于管理和维护。

Monorepo 搭建

最初使用 pnpm workspaces 搭建 Monorepo 项目,然而安装依赖后启动报错:

查询到上述两个 issue 后,在目录中添加 .npmrc 文件后重新安装依赖项目启动成功。

node-linker=hoisted

考虑到可能还会遇到其他兼容问题,最终选择官方推荐的 yarn 1.x workspaces。

目录结构设计如下:

- apps
  - mobile
  - server
- packages
  - types
- package.json

init mobile

以下按照 Work with monoreposopen in new window 搭建项目。

在 imperial-kitchen 文件夹中 使用以下命令初始化 expo 项目

npx create-expo-app apps/mobile

注意

使用 expo router,必须添加环境变量:EXPO_USE_METRO_WORKSPACE_ROOT=1

init server

后端服务选择使用原生 node 开发,详见 服务器架构设计

配置 lint

配置 eslintprettiercommitlinthusky