diff options
| author | おさむのひと <46447427+samunohito@users.noreply.github.com> | 2024-04-04 22:25:28 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-04-04 22:25:28 +0900 |
| commit | efa42a1624b0727232263f4ec196e4908ef1e712 (patch) | |
| tree | 2e317815908f82403eece7041f9e89f7ae2cc102 /packages/backend/scripts/dev.mjs | |
| parent | Merge pull request from GHSA-fpvp-74wx-35p3 (diff) | |
| download | sharkey-efa42a1624b0727232263f4ec196e4908ef1e712.tar.gz sharkey-efa42a1624b0727232263f4ec196e4908ef1e712.tar.bz2 sharkey-efa42a1624b0727232263f4ec196e4908ef1e712.zip | |
fix(backend): バックエンドのpnpm devによるビルド後にbuild-assetsを行うようにする (#13659)
* moveto scripts
* add scripts/dev.mjs
Diffstat (limited to 'packages/backend/scripts/dev.mjs')
| -rw-r--r-- | packages/backend/scripts/dev.mjs | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/packages/backend/scripts/dev.mjs b/packages/backend/scripts/dev.mjs new file mode 100644 index 0000000000..2d0de0f916 --- /dev/null +++ b/packages/backend/scripts/dev.mjs @@ -0,0 +1,61 @@ +/* + * SPDX-FileCopyrightText: syuilo and misskey-project + * SPDX-License-Identifier: AGPL-3.0-only + */ + +import { execa, execaNode } from 'execa'; + +/** @type {import('execa').ExecaChildProcess | undefined} */ +let backendProcess; + +async function execBuildAssets() { + await execa('pnpm', ['run', 'build-assets'], { + cwd: '../../', + stdout: process.stdout, + stderr: process.stderr, + }) +} + +function execStart() { + // pnpm run start を呼び出したいが、windowsだとプロセスグループ単位でのkillが出来ずゾンビプロセス化するので + // 上記と同等の動きをするコマンドで子・孫プロセスを作らないようにしたい + backendProcess = execaNode('./built/boot/entry.js', [], { + stdout: process.stdout, + stderr: process.stderr, + env: { + 'NODE_ENV': 'development', + }, + }); +} + +async function killProc() { + if (backendProcess) { + backendProcess.kill(); + await new Promise(resolve => backendProcess.on('exit', resolve)); + backendProcess = undefined; + } +} + +(async () => { + execaNode( + './node_modules/nodemon/bin/nodemon.js', + [ + '-w', 'src', + '-e', 'ts,js,mjs,cjs,json', + '--exec', 'pnpm', 'run', 'build', + ], + { + stdio: [process.stdin, process.stdout, process.stderr, 'ipc'], + }) + .on('message', async (message) => { + if (message.type === 'exit') { + // かならずbuild->build-assetsの順番で呼び出したいので、 + // 少々トリッキーだがnodemonからのexitイベントを利用してbuild-assets->startを行う。 + // pnpm restartをbuildが終わる前にbuild-assetsが動いてしまうので、バラバラに呼び出す必要がある + + await killProc(); + await execBuildAssets(); + execStart(); + } + }) +})(); |