MERNでバックエンドとフロントエンドのファイル構造を整理する方法
質問
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つのフォルダが兄弟である場合、それを実行するようにするにはどうすればよいですか? 2. 2.package.jsonは何で、node.modulesはどこにあるべきか(サーバーとクライアントの両方がそれ自身のpackage.jsonとモジュールを持つべきかどうか)?
どのように解決するのですか?
最も基本的な構造としては
root
フォルダがあり、その中に
frontend
と
backend
フォルダーを使用します。あなたが話しているのは
MERN
をスタックすると
package.json
の中に
NodeJS
バックエンド環境と
package.json
を使用します。
React
側のものです。バックエンドサーバとフロントエンドクライアントは2つの全く別のもので、そう、両方とも独自の node_modules フォルダを持っています。バックエンドでは、おそらく次のようなものがインストールされているでしょう。
Express
のようなものをインストールしているでしょう。
Mongoose
と話すより便利な方法です。
MongoDB
などを使用し、フロントエンドでは
React
をフロントエンドのフレームワークとして使用します。
Redux
で状態管理を行う、などです。さらに、package.json ファイルに記述した内容に応じて
npm install
別途
を実行すると、この2つのフォルダにインストールされます。もし、追加のパッケージをインストールしたい場合は
npm install + "the name of the package"
(を実行してください('+'と引用符を使用しないでください)。
お役に立ったでしょうか?写真、特に2枚目をご覧ください。
フォルダの構造
UPDATEです。
開発では、さらに2つのことをインストールすることを提案します。
-
npm i -D nodemon
-
npm i -D concurrently
注
-D
フラグを指定すると、それらを
devDependencies
.
nodemon
はすべてのファイルの変更を追跡し、あなたのためにバックエンドサーバを再起動するつもりです。ですから、それが "backend" フォルダの中にインストールされなければならないことは明らかです。あなたがしなければならないことは、バックエンドフォルダ内の
package.json
ファイル(backend)の中に入って、新しいスクリプトを追加するだけです。このようなものです。
"scripts": {
"start": "node app.js", // in production
"dev": "nodemon app.js", // in development
}
concurrently
を使えば、フロントエンドとバックエンドの両方を同時に起動することができます。私はトップレベルの
ルート
フォルダー -[フロントエンドとバックエンドの両方を含むフォルダー]の中で新しいNodeプロジェクトを初期化することをお勧めします。そのためには
npm init
コマンドで行い、その後に
concurrently
パッケージをインストールします。
さて、新しく作成した
package.json
ファイルを
ルート
フォルダを開き、開始部分をこのように編集します。
"scripts": {
"dev": "concurrently \"cd backend && npm run dev\" \"cd frontend && npm start\" "
}
これは
バックエンド
フォルダの中に入って
dev
コマンドを実行します (
先ほど設定したものと同じ
) が起動するので
nodemon
. さらに、それは
フロントエンド
フォルダの中に入り、デフォルトの
start
コマンドを実行します -これはまさに私たちが欲しいものです。
フォルダー構造を維持し、すべての依存関係 (上記で述べた追加の 2 つを含む) をインストールした場合、package.json
ファイル内を
root
フォルダにあるファイルから、簡単なコマンドで両方を起動できるようになります。
npm run dev
// このとき、ルートフォルダ内であることを確認してください。)
関連
-
[解決済み】「安全なTLS接続が確立される前にクライアントのネットワークソケットが切断されました」(ノード10
-
[解決済み】Heroku + node.jsのエラー(Webプロセスが起動後60秒以内に$PORTにバインドできなかった)。
-
[解決済み] Node.jsで「btoaが定義されていない」エラーが発生する
-
[解決済み] エラーです。Cannot find module 'ejs'
-
[解決済み] node.js - リクエスト - "emitter.setMaxListeners() "はどのように?
-
[解決済み] ノードのバージョンを管理するためのnまたはnvm - 各バージョンのグローバルモジュールを保持することは良いアイデアですか?
-
[解決済み] npm package.jsonファイルのdependencies, devDependencies, peerDependenciesの違いは何ですか?
-
[解決済み] Node.jsを完全にアンインストールして、最初から再インストールする方法 (Mac OS X)
-
[解決済み] Node.jsのmodule.exportsの目的と使い方を教えてください。
-
[解決済み] ExpressJS アプリケーションをどのように構成するか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] テスト
-
[解決済み】エラーです。EACCES: 権限が拒否されました、アクセス '/usr/local/lib/node_modules' 。
-
[解決済み】Google spreadsheet api Requestに不十分な認証スコープがあった。
-
[解決済み】MongoDBのデータ/DBが見つからない
-
[解決済み] bodyParser は非推奨です express 4
-
[解決済み] TypeError: コールバックはnodejsの関数ではありません。
-
[解決済み] S3 Bucket に何かを送信しようとすると、AWS Missing credentials が表示される (Node.js)
-
[解決済み] express は `body-parser deprecated undefined extended` としてエラーを投げます。
-
[解決済み] Express.js req.bodyが未定義です。
-
[解決済み] "致命的なエラーです。grunt "コマンドを実行すると、"Unable to find local grunt. "と表示されます。