nxでReact / Nestなどの複数プロジェクトを同時にローカル実行する覚書
Nxを使って、React SPAとNest.jsのAPIを同時にローカルで起動させる方法の覚書です。 意外と日本語記事が見当たらなかったので。 並列実行はnx run-manyをつかう create-nx-workspa […]
目次
Nxを使って、React SPAとNest.jsのAPIを同時にローカルで起動させる方法の覚書です。
意外と日本語記事が見当たらなかったので。
並列実行はnx run-many
をつかう
create-nx-workspace
でプロジェクトを作った場合、npm run nx run-many
で複数プロジェクトにコマンドが実行できます。
$ yarn nx run-many help
$ nx run-many help
nx run-many
Run task for multiple projects
オプション:
--help ヘルプを表示 [真偽]
--version バージョンを表示 [真偽]
--target Task to run for affected projects [文字列] [必須]
--parallel Parallelize the command [真偽] [デフォルト: false]
--maxParallel Max number of parallel processes. This flag is ignored if the
parallel option is set to false
. [数値] [デフォルト: 3]
--projects Projects to run (comma delimited) [文字列]
--all Run the target on all projects in the workspace [真偽]
--runner Override the tasks runner in nx.json
[文字列]
--skip-nx-cache Rerun the tasks even when the results are available in the
cache [真偽] [デフォルト: false]
--configuration This is the configuration to use when performing tasks on
projects [文字列]
--with-deps Include dependencies of specified projects when computing
what to run [真偽] [デフォルト: false]
--only-failed Only run the target on projects which previously failed
[真偽] [デフォルト: false]
--verbose Print additional error stack trace on failure
✨ Done in 0.95s.
--target
で実行するnxのコマンド(NOT npm-scripts)を指定し、--projects
でプロジェクトを指定するか、--all
で全部を対象にいれます。
アプリのローカル起動はnx serve
IonicやAngular同様nx serve
コマンドで起動します。これをrun-many
で動くようにすればOKです。
並列実行オプション--parallel
を忘れずに
run-many
はデフォルトだと直列実行です。そのためserve
ではどちらか1つしか起動しません。
並列実行させたい場合は、--parallel
を追加します。
% yarn nx run-many --target serve --all --parallel
yarn run v1.22.5
$ nx run-many --target serve --all --parallel
NX Running target serve for projects:
frontend
api
———————————————————————————————————————————————
nx run api:serve
nx run frontend:serve Starting type checking service…
Using 10 workers with 2048MB memory limit
Type checking in progress…
Hash: 067ee702cc14ff53ba00
Built at: 2020-11-25 15:50:35
Entrypoint main = main.js main.js.map
chunk {main} main.js, main.js.map (main) 2.19 KiB [entry] [rendered]
Debugger listening on ws://localhost:59668/9cb25519-11de-4021-863f-47d8ec0cd28d
Debugger listening on ws://localhost:59669/9cb25519-11de-4021-863f-47d8ec0cd28d
For help, see: https://nodejs.org/en/docs/inspector
**
Web Development Server is listening at http://localhost:4200/
**
[Nest] 26106 - 2020-11-25 15:50:36 [NestFactory] Starting Nest application…
[Nest] 26106 - 2020-11-25 15:50:36 [InstanceLoader] AppModule dependencies initialized +11ms
[Nest] 26106 - 2020-11-25 15:50:36 [RoutesResolver] AppController {/api}: +102ms
[Nest] 26106 - 2020-11-25 15:50:36 [RouterExplorer] Mapped {/api, GET} route +2ms
[Nest] 26106 - 2020-11-25 15:50:36 [NestApplication] Nest application successfully started +1ms
[Nest] 26106 - 2020-11-25 15:50:36 Listening at http://localhost:3333/api +2ms
Starting type checking service…
Using 10 workers with 2048MB memory limit
ℹ 「wds」: Project is running at http://localhost:4200/
ℹ 「wds」: webpack output is served from /
ℹ 「wds」: 404s will fallback to //index.html
ℹ 「wdm」: wait until bundle finished: /
localhost:4200
でReactが、localhost:3333
でAPIが動き出しました。個別にstart
やserve
しなくて済むのは便利ですね。
run-many --target=serve
は変更のWatchも行う
おそらくNest / React以外でも同様だと思いますが、HMRが有効になっている様子です。
そのため、一度nx run-many --target=serve
しておけば、Nx管理下のPJを変更しても自動リロードしてくれます。
とはいえ、依存しているlibrary
系はビルドする必要がありますので、同時にnx run-many --target=build --parallel --projects LIB1,LIB2
のようなコマンドを並列してやるとよいでしょう。