当前位置: 首页 > 知识库问答 >
问题:

node.js监视文件夹并运行脚本

白腾
2023-03-14

在我的项目中,我使用PM2重新启动node.js,它工作得很好。

但是,我需要观察文件夹的变化,启动脚本,而不是在退出后重新启动它。

为了简单起见,我对i18n使用yml。我的目标是,当我在yml文件中进行更改时,运行脚本将其转换为json,仅此而已。等待yml文件中的新更改。

PM2可以工作,但它在每次退出后一次又一次地尝试重新启动脚本。

id为[1]且pid为[28803]的PM2应用程序[i18n compile]通过信号[SIGINT]PM2脚本/HOME/.../SRC/i18n/convert.js退出,代码为[0]。停止了。“错误”

也许我应该用另一个工具来解决这个问题?

共有2个答案

洪德寿
2023-03-14

我提醒自己,生活在异步环境中:

  1. 写道自己的观察家。
  2. 将区域设置目录添加到主应用程序中的PM2 ignore_watch
  3. 将“我的观察者”添加为PM2.5应用程序,但“观察”仅添加到“观察者”。
{
  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);
    });
  });

}
陶鹏
2023-03-14

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

nodemon可以通过npm安装-g nodemon安装

当对script.js或对与script.js相同目录中的任何其他文件进行更改时,执行nodemon script.js将自动运行node script.js

 类似资料:
  • 我试图构建一个应用程序,监视文件夹及其子文件夹,以检测文件的创建或修改。要观看的文件总数将日益增加。 我曾尝试使用java nio WatchService和apache常见的FileAlteration观察者。WatchService有时会在WatchKey被获取之后和重置之前发生文件创建/修改时丢失事件。由于FileAlterationeller是基于轮询的,因此当文件计数增加时性能也会下降。

  • 问题内容: 我想在文件更改时自动启动构建。 我已经在Ruby中使用了autospec(RSpec),并且喜欢它。 如何在bash中完成? 问题答案: 阅读其他帖子的回复后,我发现了一个帖子(现已消失),我创建了这个脚本:-

  • 问题内容: 我正在尝试编写一个node.js脚本,该脚本监视文件目录中的更改,然后打印更改的文件。如何修改此脚本,以便它监视目录(而不是单个文件),并在更改文件时显示目录中的文件名? 问题答案: 试试Chokidar: Chokidar仅使用fs即可查看文件,从而解决了一些跨平台问题。

  • 本文向大家介绍node.js 如何监视文件变化,包括了node.js 如何监视文件变化的使用技巧和注意事项,需要的朋友参考一下 fs.FSWatcher fs.FSWatcher类 继承了 EventEmitter,用于监视文件变化,调用 fs.watch 后返回一个 fs.FSWatcher 实例,每当指定监视的文件被修改时,实例会触发事件调用回调函数 fs.watch() fs.watch(f

  • 问题内容: 我需要使用执行一组Cassandra DB命令的nodeJS运行Shell脚本文件。有人可以帮我吗? db.sh文件内部: 问题答案: 您可以使用shelljs模块执行任何shell命令

  • 问题内容: 我有一个名为“数据”的文件夹。此文件夹有一个名为“收件箱”的子文件夹,其中有多个“ .txt”文件。可以修改“数据”文件夹,最后会有多个带有“收件箱”子文件夹和“ .txt”文件的子文件夹。我需要监视“收件箱”文件夹中的“数据”文件夹和“ .txt”文件。我怎样才能做到这一点? INotify只是监视文件夹,并在创建子文件夹时弹出事件。创建“ .txt”文件(在哪个文件夹中)时,如何弹