function checkChangeRestart(timeout = 3000) {
return new Promise((resolve, reject) => {
const fs = require(`fs`)
const os = require(`os`)
const path = require(`path`)
const nodemon = require(`nodemon`)
const jsFile = path.normalize(`${os.tmpdir()}/${Date.now()}.js`)
const tag = Date.now()
const fnStr = ((arg) => {
console.log(arg)
setInterval(() => {}, 2 * 1000);
}).toString()
fs.writeFileSync(jsFile, `(${fnStr})('')`)
setTimeout(() => {
fs.writeFileSync(jsFile, `(${fnStr})(${tag})`)
}, 500);
nodemon({
ignoreRoot: [],
exec: `node ${jsFile}`,
watch: [jsFile],
stdout: false,
})
.on('readable', function(arg) {
this.stdout.on(`data`, data => {
let log =String(data).trim()
if(log && log.includes(tag)) {
end(true)
}
})
})
setTimeout(() => {
end(false)
}, timeout);
function end(isOk) {
resolve(isOk)
nodemon.emit(`quit`)
fs.existsSync(jsFile) && fs.unlinkSync(jsFile)
}
})
}
new Promise(async () => {
const checkChangeRestartRes = await checkChangeRestart()
console.log(`checkChangeRestartRes`, checkChangeRestartRes)
})