node.js - 如何构建一个 Express+React TypeScript 项目?
问题描述
我目前正在尝试建立一个使用 Express 作为后端并使用 React 作为前端的项目。我也想为这两个部分使用 TypeScript。为了便于设置,我使用了npx create-react-app client --template typescript
and npx express-generator-typescript server
,得到了以下目录结构:
myProjectRoot/
|_ server/
|_ src/
|_ node_modules/
|_ package.json
|_ tsconfig.json
|_ ...
|_ client/
|_ src/
|_ node_modules/
|_ package.json
|_ tsconfig.json
|_ ...
现在我client/package.json
用一行配置了 React 的开发服务器"proxy": "http://localhost:3001"
,让 Express 服务器监听端口3001
来处理 API 请求。到目前为止,一切都很好; 对于发展,这是非常好的恕我直言。
但是,我有点困惑如何最好地设置生产构建的命令。我想更改默认配置的构建目录,以避免让客户端和服务器在一个独立的目录中构建:
myProjectRoot/
|_ server/
|_ ...
|_ src/
|_ dist/
|_ compiled_backend_code
|_ client/
|_ ...
|_ src/
|_ build/
|_ compiled_frontend_code
相反,我的目标是这样的,因为它对我来说似乎更干净:
myProjectRoot/
|_ server/
|_ client/
|_ dist/
|_ server/
|_ compiled_backend_code
|_ client
|_ compiled_frontend_code
为了到达那里,我将outDir
服务器的更改tsconfig.json
为../dist/server
和build
客户端的脚本更改package.json
为react-scripts build && mv build ../dist/client
(如此处所述)。
现在的问题是编译后的代码不再找到它的依赖项,因为服务器和客户端的node_modules
文件夹不再位于dist/
目录或父目录中。我不确定这个问题有什么好的解决方案,所以我很感激任何意见,即使这意味着完全不同的项目结构。谢谢!
解决方案
你可以通过我知道的两种方式来实现这一点:
将客户端构建文件夹保存在客户端根目录中,然后像此示例中一样对其进行处理。
使用Yarn Workspaces,
node_modules
主要在根文件夹中(包使用相同依赖的不同版本时除外)
顺便说一句,这个 repo 是我使用Yarn Workspaces在 Typescript 中为全栈 Express + React Web 应用程序创建的样板。
推荐阅读
- maven - KotlinJsr223JvmDaemonLocalEvalScriptEngineFactory KotlinCompileDaemon 未启动
- kubernetes - 我可以将 Ingress 控制器指向外部服务,例如 AWS S3
- java - Apache camel 在处理完所有文件后创建空的 ctl 文件
- python - Python 列表列表作为字典值
- ios - 断言当前线程是主线程的单元测试 [iOS]
- database - 无法远程连接到 postgres 服务器(ubuntu 16.04)
- javascript - APM 标头内容包含无效字符
- java - 将单个对象和对象列表合并到Java中的单个对象列表中
- listview - 如何在 react-native ListItem 中将 V 形图标向左移动
- squarespace - 在 Squarespace 中使用主动俱乐部解决方案