NestJSでwebpack-dev-middlewreを使って気持ちよくなった
NestJSでReactを動かしたい
あること・ないこと
書いてあること
- 必要なライブラリ
- NestJSでやるべきこと
- つまづいたこと
書いてないこと
- webpackの詳細な設定
- 人それぞれ違うので参考になるかわからないため。
- webpack-dev-serverの説明
はじめに
別にSSRとかする話じゃないです。
ディレクトリ構成はこんな感じです。頑張って綺麗にしてるつもりですが、もっといい方法があると思うので教えてください :bow:
- clientにReactで作っているコンポーネントたち
- serverにNestJSのnewした時に生成させたものたち
が入っています
. ├── README.md ├── client ├── dist ├── nest-cli.json ├── node_modules ├── package.json ├── public ├── server ├── static ├── test ├── tsconfig.build.json ├── tsconfig.json ├── webpack ├── yarn-error.log └── yarn.lock
webpack-dev-middlewareなんですけどこいつが何者かっていうと webpack-dev-serverで起動するサーバーをexpressに載せ替えることができる奴なんですね
api使いたいだけなら普通にdevServerでプロキシすればいいじゃんって話なんですけど、バックエンド起動したらdevServerも起動してくれた方がかっこいいじゃないですか・・・・・・
webpack-dev-middlewareを組み込む
必要なライブラリ yarnなら
yarn add @nestjs/platform-express path yarn add -D webpack webpack-cli merge @types/webpack @types/webpack-dev-middleware @types/webpack-hot-middleware webpack-dev-middleware webpack-dev-server webpack-hot-middleware
npmなら
npm -i -s @nestjs/platform-express path npm -i -s --dev webpack webpack-cli merge @types/webpack @types/webpack-dev-middleware @types/webpack-hot-middleware webpack-dev-middleware webpack-dev-server webpack-hot-middleware
やるべきことは簡単で
NestFactory.create
のときにNestExpressApplication
を指定する- NestのオブジェクトにExpressのuseメソッドを生やすことができます
- github.com
app.use(webpackMiddleware(....))する
ServerStaticModuleを導入する
くらいでしょうか。あとはnestのサーバ起動して、http://localhost:portに接続すれば、いい感じになるんじゃないですかね。
つまづいたところ
- nestのglobal-prefixに何かしらつけておく、webクライアントと差別化できる何かをprefix煮付けるといい気がします
- nestのportとwebpack-dev-serverのポートを合わせておく
- webpackがjsなので弾かれる.
- tsconfig.jsonで
allowJS: true
にすればいいです
- tsconfig.jsonで
- webpackでoutput.fileにhashを使っている場合
- hmlWebpackPluginを使えば良いかと思います
- ここで注意なのですが、htmlWebpackPluginへ渡す
index.html
のpathはwebpack.config.dev.jsがある場所からのpathではなく、webapck-dev-middlewareを使っているファイルからのpathになります。
最後に
決していいディレクトリ構造でも、プログラムではないと思います。
ただいい感じにまとまったので個人的には満足しています。
NestJSにwebpack-dev-midlleware組み込んでReact動かしてみたけど思ったより心地いい
— 🍆naporitan🍆@うーねこ団 (@naporin24690) 2019年11月19日
全部Nestで動いてくれてることが単に気持ちいいわ
— 🍆naporitan🍆@うーねこ団 (@naporin24690) 2019年11月19日
最近の悩み
最近コンフィグとかこう書いた方が気持ちいいかなーみたいなことばっか考えててちゃんともの作ってないのやばいぞ
— 🍆naporitan🍆@うーねこ団 (@naporin24690) 2019年11月19日