帮酷LOGO
0 0 评论
  • 显示原文与译文双语对照的内容
文章标签:NEAT  WRAP  监听  换行  Fsevents  
A neat wrapper around node.js fs.watch / fs.watchFile.

  • 源代码名称:chokidar
  • 源代码网址:http://www.github.com/paulmillr/chokidar
  • chokidar源代码文档
  • chokidar源代码下载
  • Git URL:
    git://www.github.com/paulmillr/chokidar.git
  • Git Clone代码到本地:
    git clone http://www.github.com/paulmillr/chokidar
  • Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/paulmillr/chokidar
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
  • Chokidar Mac/Linux Build StatusWindows Build statusCoverage StatusJoin the chat at https://gitter.im/paulmillr/chokidar

    node.js fs.watch/fs.watchFile/fsevents. 周围的整洁包装

    NPMNPM

    为什么?

    Node.js fs.watch:

    • 不报告 OS X 上的文件名。
    • 在 OS X 上使用像 Sublime 这样的编辑器时,根本不报告事件。
    • 通常报告事件两次。
    • rename 形式发出大多数更改。
    • 有很多其他问题
    • 不提供递归监视文件树的简单方法。

    Node.js fs.watchFile:

    • 在事件处理时几乎同样坏。
    • 也不提供任何递归监视。
    • 高CPU利用率。

    Chokidar解决这些问题。

    本产品最初用于 brunch brunch,现在用于Karma,PM2,PM2,browserify,microsoft Code many,many many many。 它已经在生产环境中证明。

    Chokidar仍然依赖于 node.js 核心 fs 模块,但是当使用 fs.watchfs.watchFile 进行监视时,它将通过获取文件统计信息和/或者目录内容来对接收的事件进行规范化。

    在 Mac OS X 上,chokidar默认使用一个公开了 Darwin FSEvents API的本地扩展。 大多数 *nix 平台上可以用的kqueue 相比,这提供了非常有效的递归监视。 Chokidar还必须做一些工作来标准化接收到的事件。

    在其他平台上,fs.watch -based实现是默认的,它避免轮询并保持CPU的使用。 请注意,chokidar会递归地为已经指定的路径范围内的所有内容启动观察者,因这里不要浪费系统资源。

    正在启动

    使用npm安装:

    
    npm install chokidar --save
    
    
    
    

    然后在代码中使用 require 并将它的使用:

    var chokidar =require('chokidar');// One-liner for current directory, ignores. dotfileschokidar.watch('.', {ignored:/(^|[/])../}).on('all', (event, path) => {
     console.log(event, path);
    });
    // Example of a more typical implementation structure:// Initialize watcher.var watcher =chokidar.watch('file, dir, glob, or array', {
     ignored:/(^|[/])../,
     persistent:true});// Something to use when events are received.var log =console.log.bind(console);// Add event listeners.watcher
    . on('add', path=>log(`File ${path} has been added`))
    . on('change', path=>log(`File ${path} has been changed`))
    . on('unlink', path=>log(`File ${path} has been removed`));// More possible events.watcher
    . on('addDir', path=>log(`Directory ${path} has been added`))
    . on('unlinkDir', path=>log(`Directory ${path} has been removed`))
    . on('error', error=>log(`Watcher error: ${error}`))
    . on('ready', () =>log('Initial scan complete. Ready for changes'))
    . on('raw', (event, path, details) => {
     log('Raw event info:', event, path, details);
     });// 'add', 'addDir' and 'change' events also receive stat() results as second// argument when available: http://nodejs.org/api/fs.html#fs_class_fs_statswatcher.on('change', (path, stats) => {
     if (stats) console.log(`File ${path} changed size to ${stats.size}`);
    });// Watch new files.watcher.add('new-file');watcher.add(['new-file-2', 'new-file-3', '**/other-file*']);// Get list of actual paths being watched on the filesystemvar watchedPaths =watcher.getWatched();// Un-watch some files.watcher.unwatch('new-file*');// Stop watching.watcher.close();// Full list of options. See below for descriptions. (do not use this example)chokidar.watch('file', {
     persistent:true,
     ignored:'*.txt',
     ignoreInitial:false,
     followSymlinks:true,
     cwd:'.',
     disableGlobbing:false,
     usePolling:true,
     interval:100,
     binaryInterval:300,
     alwaysStat:false,
     depth:99,
     awaitWriteFinish: {
     stabilityThreshold:2000,
     pollInterval:100 },
     ignorePermissionErrors:false,
     atomic:true// or a custom 'atomicity delay', in milliseconds (default 100)});

    API

    chokidar.watch(paths, [options])

    • paths ( 字符串的字符串或者 array )。 文件路径,要递归观看的目录,或者全局模式。
    • options ( 对象) 选项对象如下所示:
    持久性
    • persistent ( 默认值:true )。指示在监视文件时进程是否继续运行。 如果在使用 FSEvents 时设置为 false,则不会在 ready 之后发出更多事件,即使流程继续运行。
    路径筛选
    • ignored ( anymatch -compatible定义) 定义要忽略的文件/路径。 整个相对或者绝对路径被测试,而不仅仅是文件名。 如果提供有两个参数的函数,则每次路径调用两次,每次使用一个参数( 路径),第二个参数为2,第二个参数为2.
    • 如果设置为 chokidar,则在实例化观察路径时,也会发出 add/addDir 事件以匹配路径,同时将观察结果作为发送。
    • 当链接的时候,只关注符号符号本身,而不是按照链接引用和冒泡事件的路径来进行更改。
    • cwd ( 无默认值)。从它的派生监视 paths的基目录。 事件发出的路径将与这里相对应。
    • disableGlobbing ( 默认值:false )。如果设置为 true,那么传递给 .watch().add()的字符串将被视为文字路径名。
    性能
    • 如果轮询导致高CPU利用率,则请考虑将这里设置设置为 false。 对于通过网络成功地监视文件,通常需要花费英镑,并且可能需要在其他非标准情况下成功地监视文件。 在 OS X 上显式设置为 true 会覆盖 useFsEvents 默认值。 你还可以将 CHOKIDAR_USEPOLLING env变量设置为 true ( 1 ) 或者 false ( 0 ),以便覆盖这里选项。
    • 轮询特定设置 ( usePolling: true 时有效)
      • interval ( 默认值:100 )。文件系统轮询的间隔。 你还可以设置 CHOKIDAR_INTERVAL env变量来替代这里选项。
      • binaryInterval ( 默认值:300 ) 二进制文件的文件系统轮询间隔。 ( 查看二进制扩展插件列表)
    • useFsEvents ( 默认值:OS X 上的true )。 是否在可用情况下使用 FSEvents 监视接口。 当显式设置为 trueFSEvents 可用时,这里设置将设置 usePolling 设置。 当在 OS X 上设置为 false 时,usePolling: true 将成为默认值。
    • 在 relying alwaysStat ( 默认值:false ) 对象中,如果依赖于 addaddDirchange 事件,将这里对象设置为 true,以确保它在未从基础监视事件中获得的情况下提供。
    • 如果设置了 depth ( 默认值:undefined ),则限制要遍历的子目录级别的数量。
    • awaitWriteFinish ( 默认值:false )。默认情况下,当文件首次出现在磁盘上时,add 事件将在整个文件写入之前激发。 此外,在写入文件时,某些 change 事件将被发出。 在某些情况下,特别是在监视大文件时,需要等待写操作完成才能响应文件创建或者修改。 如果将 awaitWriteFinish 设置为 true ( 或者truthy值) 将轮询文件大小,保存它的addchange 事件,直到大小不为可以配置的时间更改。 适当的持续时间设置很大程度上依赖于操作系统和硬件。 为了准确检测这个参数,这个参数应该比较高,使得文件的响应。 谨慎使用。
      • options.awaitWriteFinish 可以设置为对象,以便调整计时参数:
      • awaitWriteFinish.stabilityThreshold ( 默认值:2000 )。发出事件前文件大小保持不变的时间的毫秒数。
      • awaitWriteFinish.pollInterval ( 默认值:100 ) 文件大小轮询间隔。
    错误
    • ignorePermissionErrors ( 默认值:false )。指示如果可以能,是否监视没有读取权限的文件。 如果由于 EPERM 或者 EACCES 设置为 true,则监视失败,将无法静默地抑制错误。
    • atomic ( 默认值:如果 useFsEventsusePollingfalse,则为 true )。 自动过滤使用"原子写入"而不是直接写入源文件的编辑器时发生的工件。 如果文件在被删除的100毫秒内被添加,那么Chokidar会发出一个 change 事件而不是 unlink。 如果默认值为 100,则可以通过将 atomic 设置为自定义值以毫秒为单位来重写它。

    方法&事件

    chokidar.watch() 生成 FSWatcher的实例。 FSWatcher的方法:

    • .add(path/paths): 添加文件,目录或者用于跟踪的全局模式。 接受字符串的array 或者只接受一个字符串。
    • .on(event, callback): 侦听FS事件。 可用事件:addaddDirchangeunlinkunlinkDirreadyrawerror。 这里外,all 还可以用基础事件名称和路径发出,而不是 readyrawerror的每个事件。
    • .unwatch(path/paths): 停止监视文件,目录或者全局模式。 接受字符串的array 或者只接受一个字符串。
    • .close(): 删除被监视的文件中的所有侦听器。
    • .getWatched(): 返回一个对象,该对象表示由这里 FSWatcher 实例监视的文件系统上的所有路径。 对象的键是所有目录( 除非使用 cwd 选项,否则使用绝对路径),值是每个目录中包含的项的名称数组。

    在你的文件监视中需要一个CLI接口,查看 chokidar CLI插件,允许你在每次更改时执行命令,或者获取更改事件的一个萨满流。

    安装疑难解答

    • npm WARN optional dep failed, continuing fsevents@n.n.n

      • 这里消息是 npm 处理可选依赖项的正常部分,并不表示问题。 即使伴随着其他相关错误消息,Chokidar也应该正常工作。
    • ERR! stack Error: Python executable"python" is v3.4.1, which is not supported by gyp.

      • 你应该能够通过安装 python 2.7并运行以下命令来解决这里问题: npm config set python python2.7
    • gyp ERR! stack Error: not found: make

      • 在Mac上,安装XCode命令行工具

    许可证

    麻省理工学院许可证( MIT )

    版权( c ) 2016 Paul Miller ( http://paulmillr.com ) & Elan Shanker

    若要在取得该软件副本时免费授予任何人,如有下列条件的软件,请免费授予该软件的副本,并与相关的文档文件("软件") 进行许可,包括不受限制的权利,包括以下条件:

    上述版权声明和本许可声明须包括在所有的副本或实质性部分的软件。

    软件是"是",没有任何保证,表示或者隐含,包括但不限于销售,适合特定用途和 NONINFRINGEMENT。 作者或者版权持有人在合同。侵权或者它的他与软件或者它的他用户交易的行为。



    文章标签:WRAP  换行  监听  NEAT  Fsevents  

    Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语