76 lines
1.6 KiB
JavaScript
76 lines
1.6 KiB
JavaScript
import { spawn } from 'node:child_process'
|
|
|
|
const host = '127.0.0.1'
|
|
const port = '43117'
|
|
let printedLinks = false
|
|
|
|
const nuxtProcess = spawn('nuxt', [
|
|
'dev',
|
|
'--dotenv',
|
|
'.env.development',
|
|
'--host',
|
|
host,
|
|
'--port',
|
|
port
|
|
], {
|
|
shell: true,
|
|
stdio: ['inherit', 'pipe', 'pipe']
|
|
})
|
|
|
|
/**
|
|
* 개발 서버 링크 출력
|
|
* @param {string} localUrl - Nuxt 로컬 URL
|
|
* @returns {void}
|
|
*/
|
|
const printDevLinks = (localUrl) => {
|
|
const url = new URL(localUrl)
|
|
const origin = `${url.protocol}//${url.hostname}:${url.port}`
|
|
const localhostOrigin = `${url.protocol}//localhost:${url.port}`
|
|
|
|
console.log('')
|
|
console.log('sori.studio 개발 서버')
|
|
console.log(`- Localhost: ${localhostOrigin}/`)
|
|
console.log(`- Local IP: ${origin}/`)
|
|
console.log(`- Admin: ${origin}/admin`)
|
|
console.log(`- Tailwind Viewer: ${origin}/_tailwind/`)
|
|
console.log('')
|
|
}
|
|
|
|
/**
|
|
* Nuxt 로그 처리
|
|
* @param {Buffer} chunk - 로그 버퍼
|
|
* @returns {void}
|
|
*/
|
|
const handleNuxtLog = (chunk) => {
|
|
const text = chunk.toString()
|
|
|
|
for (const line of text.split('\n')) {
|
|
const localMatch = line.match(/Local:\s+(https?:\/\/[^\s]+)/)
|
|
|
|
if (localMatch && !printedLinks) {
|
|
printedLinks = true
|
|
printDevLinks(localMatch[1])
|
|
continue
|
|
}
|
|
|
|
if (/(^|\s)(error:|warn:|warning:|failed|fatal|eaddrinuse|cannot)\b/i.test(line)) {
|
|
console.log(line)
|
|
}
|
|
}
|
|
}
|
|
|
|
nuxtProcess.stdout.on('data', handleNuxtLog)
|
|
nuxtProcess.stderr.on('data', handleNuxtLog)
|
|
|
|
nuxtProcess.on('close', (code) => {
|
|
process.exit(code || 0)
|
|
})
|
|
|
|
process.on('SIGINT', () => {
|
|
nuxtProcess.kill('SIGINT')
|
|
})
|
|
|
|
process.on('SIGTERM', () => {
|
|
nuxtProcess.kill('SIGTERM')
|
|
})
|