我有基于express + mongoose的后端。文件结构是:
- /models
-- item.js
- /node.modules
-- ...
- server.js
- package-lock.json
- package.json
以及用于前端的常规create-react-app文件夹:
- /src
-- /assets
--- index.css
-- /components
--- Somecomponent.js
-- /containers
--- App.js
-- /reducers
--- somereducers.js
- /node.modules
-- ...
-- index.js
-- registerServiceWorker.js
- .gitignore
- package-lock.json
- package.json
我想用适当的方式一起使用它。我想这样组织它:
- /client
-- /src
...
-- index.js
-- registerServiceWorker.js
- .gitignore
- package-lock.json
- package.json
- /server
- /models
-- item.js
- /node.modules
-- ...
- server.js
- package-lock.json
- package.json
在这个阶段,我卡住了。我可以让它在服务器文件夹内的客户端文件夹或如果服务器文件夹在客户端。1.但如何使它运行时,两个文件夹是兄弟姐妹?2.什么应该是package.json和节点.模块应该在哪里(是否服务器和客户端都应该有自己的package.json和模块?)
3条答案
按热度按时间vaqhlq811#
最基本的结构是有一个
root
文件夹,其中包含frontend
和backend
文件夹。由于您正在谈论***MERN*堆栈,您的NodeJS
后端环境中将有一个package.json
,而您的React
**端将有一个package.json
。后端服务器和前端客户端是两个完全独立的东西,所以是的,它们都有自己的node_modules文件夹。在后端,你可能已经为你的Node运行时安装了像Express
这样的东西,Mongoose
是一种更方便的方式与MongoDB
等进行对话,在前端,您将使用React
作为前端框架,Redux
用于状态管理等。此外,根据您在package.json文件中已经列出的内容,当你单独运行npm install
时,它会被安装在这两个文件夹中。如果你想安装其他的软件包,只需要在你需要的特定文件夹中运行npm install + "the name of the package"
(不带'+'和引号)(后端或/和前端)。我希望这是有帮助的。看看照片,尤其是第二张。
应用结构
文件夹结构
更新日期:
在开发中,我建议安装两个额外的东西:
1.
npm i -D nodemon
1.
npm i -D concurrently
注意:
-D
标志将它们安装为 *devDependencies
*。**
nodemon
**会跟踪每个文件的更改,并为您重新启动后端服务器。因此,很明显,它应该安装在“backend”文件夹中。您所要做的就是进入package.json
文件(后端)并添加新脚本。类似于以下内容:concurrently
允许同时启动前端和后端,建议在顶层的root文件夹-[前端和后端的文件夹]中初始化一个新的Node项目,使用npm init
命令,然后在那里安装concurrently
包。现在,打开你新创建的
package.json
文件,在你的***根***文件夹中,编辑开始部分,像这样:这将做的是进入backend文件夹并运行
dev
命令(* 与我们刚刚配置的命令相同 ),因此将启动nodemon
。此外,它还将进入frontend文件夹并运行默认的start
命令-这正是我们想要的。如果你保留了文件夹结构,安装了所有的依赖项(包括我上面提到的另外两个),改变了*
root
**文件夹中的package.json
文件,你就可以用一个简单的命令启动它们:npm run dev
//这样做时,请确保您在根文件夹中:)enyaitl32#
除了公认的答案之外,如果基于业务逻辑而不是技术逻辑,前端和后端内部的文件夹结构划分更有用。
将整个堆栈划分为独立的组件,这些组件之间最好不共享文件,这是使您的应用程序更具可测试性和易于更新的最佳方法。这是一种尽可能小的方式,通常称为微服务架构。
设计不佳:难以更新和测试:
********易于更新和测试:
brccelvz3#
根据你的需求使用结构,比如基于项目的范围或深度。但是要确保端点和模型是分开的,所以一开始就有这样的设置