fix(backend): pnpm devが動作しない問題を修正 (MisskeyIO#641)
This commit is contained in:
		
							parent
							
								
									0b207e0006
								
							
						
					
					
						commit
						2b7f438862
					
				|  | @ -18,7 +18,7 @@ | |||
| 		"build:tsc": "tsc -p tsconfig.json && tsc-alias -p tsconfig.json", | ||||
| 		"watch": "node ./scripts/watch.mjs", | ||||
| 		"restart": "pnpm build && pnpm start", | ||||
| 		"dev": "node ./scripts/dev.mjs", | ||||
| 		"dev": "nodemon -w src -e ts,js,mjs,cjs,json --exec \"cross-env NODE_ENV=development pnpm run restart\"", | ||||
| 		"typecheck": "tsc --noEmit && tsc -p test --noEmit", | ||||
| 		"eslint": "eslint --quiet \"src/**/*.ts\"", | ||||
| 		"lint": "pnpm typecheck && pnpm eslint", | ||||
|  |  | |||
|  | @ -1,61 +0,0 @@ | |||
| /* | ||||
|  * 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(); | ||||
| 			} | ||||
| 		}) | ||||
| })(); | ||||
		Loading…
	
		Reference in New Issue