检查 nodmeon 是否可以修改文件后重启应用


/**
 * 检查 nodmeon 是否可以修改文件后重启应用(某些设备可以检测到修改, 但应用并没有重启)
 * @param {number} timeout 多少毫秒后超时返回 false, 默认 3000
 * @returns {boolean}
 */
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)
})
原文地址:https://www.cnblogs.com/daysme/p/15056441.html