zoukankan      html  css  js  c++  java
  • 检查 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)
    })
    
  • 相关阅读:
    Centos安装Memcached和(Nginx)Memcache扩展详细教程
    文章已被删除!
    phonegap安卓手机开发入门
    微信分享链接带图片文字和描述
    CSDN数据库被爆 统计CSDN用户都喜欢哪些密码
    ...
    重新初始化 VS2010
    spark系列之基本概念
    python 数字字典加密非汉字
    MySQL 5.7实现 row_number窗口函数
  • 原文地址:https://www.cnblogs.com/daysme/p/15056441.html
Copyright © 2011-2022 走看看