Настойчивость “fs.watch”

Я работаю в NodeJS, знакомом он рекомендовал мне делать watchdog (надзор), в котором, когда команда изменена, этот был бы перезагружен автоматически (когда сохранялись раньше). В документации NodeJS я нашел следующее:

https://nodejs.org/api/fs.html#fs_fs_watch_filename_options_listener

Однако, я не знаю, какие процессы делает это, а именно, Ваша настойчивость, если он проверяет, если файлы были изменены через периоды времени, или оно жестикулирует только, когда файл был изменен вместо того, чтобы делать циклы.

Также я не знаю, было ли это самое работоспособное, открыт в подсказки.

В настоящее время, у меня есть следующий код, чтобы загружать все команды, которые внутри каталога / cmd/.

fs.readdir(`./cmd/`, (err, files) => {
    if(err) console.error(err);
    console.log(logwhite(
        `Loading a total of ` + loggreen(files.length) + ` commands.`
    ));
    const launch = new Date().getTime();
    files.forEach(f=> {
        let props = require(`./cmd/${f}`);
        var date = new Date().getTime();
        console.log(
            `${loggreen(date - launch)}ms   ` +
            loggray(`Loading Command: ${props.help.name}        `) +
            loggreen(` Status OK`)
        );
        bot.commands.set(props.help.name, props);
        props.conf.aliases.forEach(alias => {
            bot.aliases.set(alias, props.help.name);
        });
    });
});

Я имею следующее по отношению к равному, чтобы перезагружать команду, которую я использую reload {comando}:

let command;
if (bot.commands.has(params[0])) {
  command = params[0];
} else if (bot.aliases.has(params[0])) {
  command = bot.aliases.get(params[0]);
}
if (!command) {
  return msg.channel.sendMessage(`I cannot find the command: ${params[0]}`);
} else {
  msg.channel.sendMessage(`Reloading: ${command}`)
    .then(m => {
      bot.reload(command)
        .then(() => {
           m.edit(`Successfully reloaded: ${command}`);
        })
        .catch(e => {
           m.edit(`Command reload failed: ${command}\n\`\`\`${e.stack}\`\`\``);
        });
    });
}

Знакомый советовал мне, чтобы он использовал fs.watch, и мой вопрос был что если fs.watch он проверял изменения периодически (он проверяет их в интервале времени), или проверяет изменения, когда файл был изменен (как событие).

То, что я хочу сделать, что, когда файл будет изменен, что выполнил команду, похожую на того, который у меня есть reload {comando}а именно, я изменяю файл, это сохраняю, и программа это перезагружает автоматически, без необходимости использовать команду повторно похвалите.

Он fs.watch самое работоспособное для этого задания? И если это так: Как он был бы должен использовать это?

1
задан 02.01.2017, 22:25
0 ответов

Чтобы использовать fs.watch достаточно делать это:

#!/usr/bin/env node
'use strict';

var fs = require('fs');
// var spawn = require('child_process').spawn;


(function start() {
    // aqui puedes cargar todos los comandos, tal cual lo haces al principio
})();

// pasas el archivo o directorio que quieras observar
const DIRECTORY = './cmd'
fs.watch(DIRECTORY, {encoding: 'buffer', recursive: true}, (eventType, fileName) => {
    // el primer parametro es el directorio que vigilirá
    // el segundo, es un objeto con el encoding, en este caso un buffer, y si va a ser recursivo(en sistemas basados en LINUX esta opcion no afecta, ver Nota)
    // el tercero, es el callback que recibe 2 argumentos

    if (eventType == 'change' && fileName) {
        // en este punto ya tienes el nombre del archivo, que puedes abrirlo con fs.readFile y hacer lo que quieras, o recargarlo como quieras.
        // en el caso que quieras recargar todos, puedes volver a llamar la funcion start();
    }
})

Заметь: Параметр перекурсива в выборах, только функционирует в windows, так что наблюдатель или watch он только может наблюдать файлы и папки, которые были бы в уровне папки, в которой он начинает слушать, которым, если ты имеешь файлы внутри папок дочери по отношению к этому каталогу, эти не будут иметь события, если он будет состоять в том, что ты обладаешь Linux.

Я не добавил часть процессов, потому что я вижу, что ты перезагружаешь команды с каким-то книжным магазином (не, откуда выходит этот bot), из которого я не знаю многие из функций, которые у тебя есть

1
ответ дан 03.12.2019, 17:54
  • 1
    fs.watch перезагрузи файл mú ltiples разы, 2-3 (я сделал один console.log внутри if, и наследства 2-3 mensages в консоль, все принадлежат eventType == ' change'). И, нет, я не использую librerí схвати приходящие ученицы для carga/actualizació n команд, он просто exports. –  03.01.2017, 13:41

Теги

Похожие вопросы