node.js观察文件夹并运行脚本

时间:2017-09-07 00:20:37

标签: node.js pm2 nodemon

我是node.js中的新手 在我的项目中,我使用PM2重新启动node.js,它工作正常。

但是,我需要查看文件夹以进行更改,启动脚本并在退出后不重新启动它。

为简单起见,我使用yml作为I18n。 我的目标,当我在yml文件中进行更改时,运行脚本将其转换为json,这就是全部。 等到yml文件中的新更改。

PM2有效,但每次尝试后都会重复尝试重新启动脚本 退出。

  

PM2 |已经退出了具有id [1]和pid [28803]的App [i18n compile]   使用代码[0]通过信号[SIGINT] PM2 |脚本   /home/.../src/i18n/convert.js有太多不稳定   重启(16)。停止。 “差错”

可能我应该使用其他工具解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

nodemon是一个工具,可以让您对目录中的文件进行更改并自动运行脚本

nodemon可以通过npm install -g nodemon

安装 当nodemon script.jsnode script.js

所在目录中的任何其他文件发生更改时,

执行script.js会自动运行script.js

答案 1 :(得分:0)

我提醒自己住在异步环境中:

  1. 写了自己的观察者。
  2. 在主应用程序中为PM2 ignore_watch添加了语言环境目录。
  3. 将我的观察者添加为PM2应用,但仅观看观察者。
  4. {
      name         : 'I18n compiler',
      interpreter  : 'babel-node',
      script       : 'tools/locales.watcher.js',
      cwd          : path.root,
      watch        : 'tools/locales.watcher.js',
      ignore_watch : ['config', 'src', 'server', 'package.json'],
      env: {
        NODE_PATH: path.src,
        NODE_ENV: 'development'
      },
    }
    
    import fs      from 'fs';
    import config  from '../config/general';
    import convert from 'i18n/convert.js';
    
    const { path } = config;
    
     // Synchronous recursively list files in a directory
    function getFilesRecur(dir, filelist) {
      const files = fs.readdirSync(dir);
      filelist = filelist || [];
      files.forEach(function(file) {
        if (fs.statSync(path.join(dir, file)).isDirectory()) {
          filelist = getFilesRecur(path.join(dir, file), filelist);
        } else if ((/\.(yml|yaml)$/i).test(file)) {
          filelist.push(path.join(dir, file));
        }
      });
      return filelist;
    }
    
    export default function setupLocalesWatcher(){
      const files = getFilesRecur(path.i18n);
    
      files.forEach(function(file) {
        console.log(`Watching: ${file}`);
        fs.watchFile(file, () => {
          convert(file);
        });
      });
    
    }