2015-06-11 73 views
2

我想使用Chokidar在我的應用程序中觀看文件。問題是,只要你嘗試實例化chokidar.watch,電子就會拋出一個錯誤。我想知道這是否是兩者之間的已知兼容性問題,以及是否有內置解決方案來解決此問題。 Google迄今爲止沒有在電子應用程序中觀看文件。只有在使用chokidar對象時纔會出現此錯誤。要求它不會導致問題。如何在Electron App中查看文件?

我在渲染過程中的代碼如下。註釋掉var觀察者代碼將完全消除控制檯錯誤。代碼直接來自他們的文檔。

var chokidar = remote.require('chokidar'); 
chokidar.watch('.', {ignored: /[\/\\]\./}).on('all', function(event, path) { 
    console.log(event, path); 
}); 

控制檯錯誤:

Uncaught Error: criterion.test is not a function 
TypeError: criterion.test is not a function 
at testCriteria (/Users/guest/Desktop/prototype/yeti-launch/node_modules/chokidar/node_modules/anymatch/index.js:29:26) 
at Array.some (native) 
at anymatch (/Users/guest/Desktop/prototype/yeti-launch/node_modules/chokidar/node_modules/anymatch/index.js:59:48) 
at EventEmitter.FSWatcher._isIgnored (/Users/guest/Desktop/prototype/yeti-launch/node_modules/chokidar/index.js:221:15) 
at EventEmitter.NodeFsHandler._addToNodeFs (/Users/guest/Desktop/prototype/yeti-launch/node_modules/chokidar/lib/nodefs-handler.js:429:12) 
at EventEmitter.<anonymous> (/Users/guest/Desktop/prototype/yeti-launch/node_modules/chokidar/index.js:410:12) 
at /Users/guest/Desktop/prototype/yeti-launch/node_modules/chokidar/node_modules/async-each/index.js:16:7 
at Array.forEach (native) 
at each (/Users/guest/Desktop/prototype/yeti-launch/node_modules/chokidar/node_modules/async-each/index.js:15:11) 
at EventEmitter.FSWatcher.add (/Users/guest/Desktop/prototype/yeti-launch/node_modules/chokidar/index.js:409:5) 

如何添加看我的項目中的任何意見是非常讚賞。 Atom編輯器使用文件資源管理器檢測文件和文件夾的添加時間,並在側邊欄中適當地顯示最新的文件夾信息。如果原子能做到這一點,我的應用程序也能做到!

+0

我的解決方案迄今已經實施的主要過程chokidar和使用含有IPC消息路徑被監視到主進程。一個新的文件/文件夾觸發Webview將回調發送回呈現器。這並不完美......主要是因爲Chokidar堅持在每次檢測到新鏈接/非鏈接文件夾時發送多個事件......但這是一項改進。這是我的應用程序所必需的,因爲用戶可以爲保存的文件選擇默認目錄。該應用程序需要能夠檢測並顯示在應用程序之外添加的文件(實時)。它是一種痛苦。 – CodeManiak

+1

也許這是相關的? http://ourcodeworld.com/articles/read/160/watch-files-and-directories-with-electron-framework – cladelpino

回答

1

這可能破壞電子的遠程對象的所有規則 - 但你可以嘗試訪問的chokidar遠程版本:

var chokidar = global\['require'\]('remote').require('chokidar');