2017-08-15 62 views
0

所以我一直在尝试使用chokidar的方式来加载在某个文件夹中添加的命令,现在因为chokidar我能找到的唯一的文档是它与github上页作为提供简单警报的唯一的例子,我一直在努力实现这个由于两个问题: 我可以在任何值不返回到主功能 - 从我的理解,这是因为chokidar继承EventEmitter ,但使用包装函数应该以某种方式解决这个问题? 使用chokidar函数加载的文件可能会非常复杂。使用chokidar加载文件

由于有问题的程序需要加载命令并在不同的点进行解析,并且解析将会发生异步。

所以我的问题很简单,我该怎么继续呢?

下面的代码:

export default function(dir) { 
    let chokidar = require('chokidar'); 
    let fs = require('fs'); 
    let log = console.log.bind(console); 


    let watcher = chokidar.watch(dir, { 
     ignored: /(^|[\/\\])\../, 
     persistent: true 
    }); 
    let files; 
    let test; 
    files = "TEST" 

    watcher 
    .on('addDir', path => { 
     log(`Directory ${path} has been found`); 
    }) 
    .on('add', path => { 
     log(`Before : ${files}`) 
     test = path 
     log(`After : ${files}`) 
     //require(path) 
     log(`File ${path} has been found`) 
    }) 
    .on('ready',() => { 
     log(files, test) 
     files = test; 
     log(files, test) 
    }); 
    log(files) 
} 

回答

0

一些交融与chokidar +事件后,得到的答复是相当容易的:

本质上给每个事件或多或少就像是自己的小程序,但谁不/不能直接返回一个值。

因此,您可以将所需的数据发送到另一个将要专门处理的事件。

在我的情况在我的 “main.js” 所有我需要做的文件是:

let events = require('events'); 
var loader = new events.EventEmitter(); 
watchdog(cmddir, (dir) => { 
    loader.emit("loadcommand", dir) 


loader.on('loadcommand', (file) => { 
    require(file); 
}); 

下面是关于event.emitters一些相关的信息:

https://nodejs.org/api/events.html#events_class_eventemitter